Autotools为ar添加了库标志

Autotools adds library flags to ar

本文关键字:标志 添加 ar Autotools      更新时间:2023-10-16

我目前正在移植我的c++项目以使用GNU autotools工具链,并且我在设置我的库依赖项时遇到了麻烦。似乎发生的事情是,它给命令ar标志意味着g++,如-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添加参数,但如果我删除该变量,那么它不会给g++的标志。我该怎么办?

看起来您没有使用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_LTLIBRARIES,它应该为您工作。

你期望这一行做什么?:

libccade_a_LIBADD = $(libsdl2_LIBS) $(libsdl2_image_LIBS)

ar不做任何链接,它不关心其他库,所以没有必要在这里指定它们