【发布时间】:2013-07-02 11:06:33
【问题描述】:
在我的项目的根目录中,我有一个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)
在my_lib 的CMakelist.txt 中我有:
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_LIB 在CMakelist.txt 的CMakelist.txt 中的TARGET_LINK_LIBRARIES 中指定my_app,我只想使用这个标志(--whole-archive)。
如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB) 不存在,我不想在CMAKE_EXE_LINKER_FLAGS 中添加"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"。
我尝试从根目录中的 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")
但这不起作用。
我该怎么做?
【问题讨论】: