C / cmake的 - 如何当TARGET_LINK_LIBRARIES指定库中的链接器标志添加到一个(未使用)库?

问题描述 投票:5回答:1

在我的项目的根目录下,我有my_libmy_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.txtmy_lib我有:

ADD_LIBRARY(MY_LIB
    my_lib.c
)
TARGET_LINK_LIBRARIES(MY_LIB)

CMakelist.txtmy_app我有:

ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app MY_LIB)

我的问题是,我只是想,如果在--whole-archive指定MY_LIBTARGET_LINK_LIBRARIESCMakelist.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")

但是,这是行不通的。

我怎样才能做到这一点?

c linker cmake
1个回答
13
投票

CMake的命令target_link_libraries允许用于连接给定的目标时指定两个库和标志。而不是直接使用目标名称MY_LIBTARGET_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})
© www.soinside.com 2019 - 2024. All rights reserved.