我目前正在移植我的C ++项目以使用GNU autotools工具链,而我在设置库依赖项时遇到了麻烦。似乎正在发生的是它给出了用于g ++的命令ar
标志,例如-lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2
。
以下是src/Makefile.am
的代码:
noinst_LIBRARIES = libccade.a
libccade_a_SOURCES = CCade.h CCade_graphics.h CCade_graphics.cpp CCade_util.h CCade_util.cpp
libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
libccade_a_CFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS)
以下是make
推出的内容:
ar cru libccade.a CCade_graphics.o CCade_util.o -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2
ar: invalid option -- 'L'
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
...(more documentation on ar)...
似乎是从libccade_a_LIBADD
添加了args,但是如果删除该变量,那么它就不会将标志赋给g++
。我该怎么办?
答案 0 :(得分:2)
您好像没有使用libtool
。我通常做的是把它放在configure.ac
:
AM_PROG_LIBTOOL
然后我的Makefile.am
会是这样的:
noinst_HEADERS = CCade.h CCade_graphics.h CCade_util.h
noinst_LTLIBRARIES = libccade.la
libccade_la_SOURCES = CCade_graphics.cpp CCade_util.cpp
libccade_la_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
libccade_la_CPPFLAGS = $(libsdl2_CFLAGS) $(libsdl2_image_CFLAGS)
确保第二个变量 noinst_ LT LIBRARIES ,它应该适合您。
答案 1 :(得分:0)
你期望这条线做什么?:
libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)
ar不进行任何链接,它不关心其他库,因此不需要在这里指定它们。