在我的项目的根目录下,我有my_lib
和my_app
子目录另一个。 my_lib
定义填充由所述接头限定的部分表中的库,这些表不直接由my_app
使用,所以此库不相连。
要强制my_lib被挂我加了标志--whole归档描述here.
和它的作品!
在根目录下的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)
在CMakelist.txt
的my_app
我有:
ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app MY_LIB)
我的问题是,我只是想,如果在--whole-archive
指定MY_LIB
在TARGET_LINK_LIBRARIES
的CMakelist.txt
使用这个标志(my_app
)。
如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB)
是不存在的,我不想在"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"
添加CMAKE_EXE_LINKER_FLAGS
。
我试图从CMakelist.txt根删除此标志,并添加以下到CMakelist.txt
子目录my_lib
:
SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
但是,这是行不通的。
我怎样才能做到这一点?
CMake的命令target_link_libraries允许用于连接给定的目标时指定两个库和标志。而不是直接使用目标名称MY_LIB
在TARGET_LINK_LIBRARIES
通话,使用一个包装与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})