c++ - Autotools 将库标志添加到 ar

标签 c++ shared-libraries autotools

我目前正在移植我的 C++ 项目以使用 GNU autotools 工具链,但在设置我的库依赖项时遇到问题。似乎正在发生的事情是,它给出了用于 g++ 的命令 ar 标志,例如 -lSDL2 -L/usr/local/lib -lSDL2_image -lSDL2。 p>

这是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,它应该适合您。

关于c++ - Autotools 将库标志添加到 ar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39938689/

相关文章:

c++ - 结构化绑定(bind)以获取子 vector 的连续元素而无需复制

r - 在 R Rstudio 中找不到 libR.so

c++ - 跨平台 C++ 动态库插件加载器

mysql - 如何将 mysql.h 和 my_global.h 包含到 Makefile.am 中?

c++ - 带有 ax_check_compile_flag 的 autotools 语法错误

c++ - 为什么 "out of source"构建不是默认的?

c++ - GSL blas 例程在 Visual Studio 中变慢

python - python 中的 Automake datadir 和前缀

C++原子与锁

c++ - gdb 共享库中的错误文件名