我的项目使用autotools,包含一个库和一个使用该库的程序。我想知道它是否配置为构建共享库,以便相应地更改程序的编译选项。Makefile.am 应该像这样:
if BUILDING_SHARED_LIBRARY
my_program_CFLAGS += -DBUILDING_SHARED_LIBRARY
endif
我该如何实现这个目标?
AM_CONDITIONAL([BUILDING_SHARED_LIBRARY], [test "x$enable_shared" = xyes])
configure.ac
中无法运行?libtool
会自动为构建共享库设置一些编译器标志。请检查configure.ac
文件并确保它正确地调用了libtool
。Makefile.am
的接口。 configure
将直接将配置写入libtool
,并且不会暴露给automake。if BUILDING_SHARED_LIBRARY
%.lo: AM_CXXFLAGS += -DBUILDING_SHARED_LIBRARY
%.o: AM_CXXFLAGS += -DUSING_SHARED_LIBRARY
else
%.lo: AM_CXXFLAGS += -DBUILDING_STATIC_LIBRARY
%.o: AM_CXXFLAGS += -DUSING_STATIC_LIBRARY
endif
#ifdef PIC
,在(交叉)编译MSW时不起作用,因为这个符号从未定义。LT_INIT()
中,因为这似乎是使用正确的ELF可见性/Windows DLL导出声明非常常见的需求。
PIC
宏一样? - Brett Hale