C / cmake – 在TARGET_LINK_LIBRARIES中指定库时,如何向(未使用的)库添加链接器标志?
在我的项目的根目录中,我有一个my_lib
的子目录和另一个my_app
的子目录。 库my_lib
定义了填充链接器定义的部分的表,这些表不是my_app
直接使用的,因此该库未链接。
为了强制my_lib被链接,我添加了标志–whole-archive,如下所述。
它的工作原理!
在根目录的CMakelist.txt中,我有以下内容:
SET(CMAKE_EXE_LINKER_FLAGS "-mmcu=cc430f6137 -Wl,--gc-sections -Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive") ADD_SUBDIRECTORY(my_lib)
在CMakelist.txt
的my_lib
我有:
ADD_LIBRARY(MY_LIB my_lib.c ) TARGET_LINK_LIBRARIES(MY_LIB)
在my_app
的CMakelist.txt
,我有:
ADD_EXECUTABLE(my_app my_app.c) TARGET_LINK_LIBRARIES(my_app MY_LIB)
我的问题是,如果在my_app
CMakelist.txt
中的TARGET_LINK_LIBRARIES
中指定了CMakelist.txt
,我只想使用此标志( MY_LIB
--whole-archive
)。
如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB)
不存在,我不想在"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"
添加"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"
。
我试图从root中的CMakelist.txt中删除此标志,并将以下内容添加到my_lib
子目录中的CMakelist.txt
中:
SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
但这不起作用。
我怎样才能做到这一点?
CMake命令target_link_libraries允许在链接给定目标时指定库和标志。 而不是在TARGET_LINK_LIBRARIES
调用中直接使用目标名称MY_LIB
,而是使用包含对MY_LIB
的引用的变量以及MY_LIB
--whole-archive
和--no-whole-archive
标志:
ADD_LIBRARY(MY_LIB my_lib.c ) SET(MY_LIB_LINK_LIBRARIES -Wl,--whole-archive MY_LIB -Wl,--no-whole-archive) ... ADD_EXECUTABLE(my_app my_app.c) TARGET_LINK_LIBRARIES(my_app ${MY_LIB_LINK_LIBRARIES})