在我的项目的根目录中,我有一个子目录my_lib
另一个用于my_app
。
图书馆my_lib
定义填充链接器定义的节的表,这些表不直接由my_app
,所以这个库没有链接。
为了强制链接 my_lib,我添加了标志 --whole-archive,如下所述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)
In the CMakelist.txt
of my_lib
I have:
ADD_LIBRARY(MY_LIB
my_lib.c
)
TARGET_LINK_LIBRARIES(MY_LIB)
In the CMakelist.txt
of my_app
I have:
ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app MY_LIB)
我的问题是我只想使用这个标志(--whole-archive
) if MY_LIB
指定在TARGET_LINK_LIBRARIES
in CMakelist.txt
of my_app
.
如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB)
不存在,我不想添加"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"
in the CMAKE_EXE_LINKER_FLAGS
.
我尝试从根目录中的 CMakelist.txt 中删除此标志,并将以下内容添加到CMakelist.txt
in my_lib
子目录:
SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
但这是行不通的。
我怎样才能做到这一点?