2013-07-04 74 views
4

在我的項目的根目錄中,我有一個my_lib的子目錄,另一個用於my_app。 庫my_lib定義了填充由鏈接器定義的節的表,因此這些表不直接被my_app使用,因此該庫未鏈接。C/cmake - 如何在TARGET_LINK_LIBRARIES中指定庫時將鏈接器標誌添加到(未使用)庫中?

要強制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) 

my_libCMakelist.txt我有:

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) 

我的問題是我只想使用這個標誌(--whole-archive),如果TARGET_LINK_LIBRARIES中的MY_LIB被指定爲CMakelist.txtmy_app

如果最後一行TARGET_LINK_LIBRARIES(my_app MY_LIB)不存在,我不想在CMAKE_EXE_LINKER_FLAGS中添加"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"

我試圖從CMakelist.txt根刪除此標誌,並添加以下到CMakelist.txtmy_lib子目錄:

SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive") 

但是,這是行不通的。

我該怎麼做?

回答

11

CMake命令target_link_libraries允許在鏈接給定目標時指定庫和標誌。相反,在TARGET_LINK_LIBRARIES呼叫直接使用目標名稱MY_LIB的,使用一個包裝與--whole-archive--no-whole-archive標誌的參考MY_LIB一個變量:

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}) 
相關問題