作成方法のバイナリー。そこで、バ
質問
私は、セットのcppファイルがしたいコンパイルに直接バイナリをコンパイル共有ライブラリ。
していま
bin_PROGRAMS=mybin
lib_LTLIBRARIES=libmylib.la
COMMON_SOURCES=f1.cpp f2.cpp f3.cpp
mybin_SOURCES=main.cpp $(COMMON_SOURCES)
libmylib_la_SOURCES=$(COMMON_SOURCES)
私はこのcppファイルを作るには、一度バの一なく、時にはバ/automake苦情
Makefile.am: object `f1.$(OBJEXT)' created both with libtool and without`
ってCOMMON_SOURCES入。ファイルがバの苦情の場合のリンクを設定。します。ラスターの"はなポータブル.
何をしたいというように
bin_LTPROGRAMS=mybin
その作品が存在し
編集:解明-私が使っていautomake/autoconf.何をしていますが、お肉は私のautomake Makefile.am
解決
の問題は、その源を必要とするめっきにおいて共有オブジェクトのようにあたって、静的なアーカイブ;の場合には、例えば、 g++
必要に -fPIC
フラグ。
かを二つのbuildディレクトリが入っています。
このソース階層:
./src/Makefile.am ./src/f1.cpp ./src/f2.cpp ./src/f3.cpp ./src/main.cpp ./configure.ac ./Makefile.am
ときに使うようなことに ./src/Makefile.am
:
bin_PROGRAMS = mybin lib_LTLIBRARIES = libmylib.la mybin_SOURCES = main.cpp mybin_LDADD = libmylib.la libmylib_la_SOURCES = f1.cpp f2.cpp f3.cpp
そのディレクトリを作成します Release
や ReleaseDisableShared
に ./
.ディレクトリ ./Release
走行す:
../configure && make
や ./ReleaseDisableShared
走行す:
../configure --disable-shared && make
建築後の各buildディレクトリを使用した mybin
時 ./ReleaseDisableShared/src/mybin
の libmylib.so
時 ./Release/src/libmylib.so
.
参照:
他のヒント
特に一般的なソースのライブラリをリンクます:
bin_PROGRAMS = mybin
lib_LTLIBRARIES = libmylib.la
mybin_SOURCES = main.cpp
mybin_LDADD = libmylib.la
libmylib_la_SOURCES = f1.cpp f2.cpp f3.cpp
libmylib.la
端がmybin
にリンクしてはならないファイルを使って、作成した場合は libtoolのコンビニエンスライブラリに、このようMakefile.am
のものを使用します:
bin_PROGRAMS = mybin
noinst_LTLIBRARIES = libcommon.la
lib_LTLIBRARIES = libmylib.la
mybin_SOURCES = main.cpp
mybin_LDADD = libcommon.la
libmylib_la_SOURCES = f4.cpp f5.cpp f6.cpp
libmylib_la_LIBADD = libcommon.la
libcommon_la_SOURCES = f1.cpp f2.cpp f3.cpp
このはf1.cpp
にf2.cpp
、f3.cpp
、f4.cpp
、f5.cpp
、f6.cpp
とlibmylib.la
にmain.cpp
とf1.cpp
、f2.cpp
、f3.cpp
とmybin
をリンクされます。
ターゲットはターゲットごとのCFLAGS
(または類似)が含まれている場合、automake
は、そのターゲットを構築するための別のオブジェクトファイルを作成します。 mybin
にいくつかのノーオペレーションのフラグを追加してみてください、何かます:
mybin_CPPFLAGS = -I.
または
mybin_CPPFLAGS = -DDUMMY -UDUMMY
あなたは、彼らが競合しないように、libtoolを別の拡張子で作成したオブジェクトファイルを与える必要があります。実際には、それらのファイルが再配置可能と非再配置可能なコードを使用して、両方のオブジェクトファイルのメタ情報を(これは-fPIC gccのコマンドライン引数で制御されている)を含むテキストファイルです。 libtoolのによって作成された実際のファイルは、通常「.LIBS」サブディレクトリに格納されています。基本的なメイクファイルは次のようになります。
CC = $(CXX)
LIBTOOL = libtool --quiet
SRC = lib.cpp test.cpp
LIB_SRC = lib.cpp $(SRC)
LIB_OBJ = $(LIB_SRC:.cpp=.lo)
EXE_SRC = exe.cpp $(SRC)
EXE_OBJ = $(EXE_SRC:.cpp=.o)
EXE = test
LIB = libmylib.la
all: $(EXE) $(LIB)
clean:
$(RM) *.o *.lo $(EXE) $(LIB)
$(EXE): $(EXE_OBJ)
$(LIB): $(LIB_OBJ)
$(LIBTOOL) --tag=CXX --mode=link $(LINK.cc) -shared -version-info 1:0 -rpath $(shell readlink -f .) -o $@ $< $(LDLIBS)
%.o: %.cpp
$(COMPILE.cc) -o $@ $<
%.lo: %.cpp
$(LIBTOOL) --mode=compile --tag=CXX $(COMPILE.cc) -o $@ $<