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.txtmy_lib我有:

 ADD_LIBRARY(MY_LIB my_lib.c ) TARGET_LINK_LIBRARIES(MY_LIB) 

my_appCMakelist.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})