C/cmake - wie Sie ein linker-flag, um eine (nicht verwendete) Bibliothek wenn die Bibliothek angegeben, in TARGET_LINK_LIBRARIES?
In das root-Verzeichnis meines Projekts, habe ich ein Unterverzeichnis für my_lib
und ein weiteres für my_app
.
Die Bibliothek my_lib
definiert, Tabellen, füllt ein Abschnitt definiert durch den linker, diese Tabellen werden nicht direkt verwendet my_app
, so dass diese Bibliothek wird nicht verknüpft.
Zwingen my_lib verknüpft werden, fügte ich das flag --whole-archive wie beschrieben hier.
- Und es funktioniert!
In der CMakelist.txt das root-Verzeichnis habe ich Folgendes:
SET(CMAKE_EXE_LINKER_FLAGS "-mmcu=cc430f6137 -Wl,--gc-sections -Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
ADD_SUBDIRECTORY(my_lib)
In der CMakelist.txt
von my_lib
ich habe:
ADD_LIBRARY(MY_LIB
my_lib.c
)
TARGET_LINK_LIBRARIES(MY_LIB)
In der CMakelist.txt
von my_app
ich habe:
ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app MY_LIB)
Mein problem ist, ich will nur dieses flag verwenden (--whole-archive
) wenn MY_LIB
angegeben ist, in der TARGET_LINK_LIBRARIES
im CMakelist.txt
von my_app
.
Wenn das die Letzte Zeile TARGET_LINK_LIBRARIES(my_app MY_LIB)
ist nicht da, ich will nicht hinzufügen "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive"
im CMAKE_EXE_LINKER_FLAGS
.
Ich versucht zu entfernen, diese fahne aus dem CMakelist.txt in root und fügen Sie den folgenden in die CMakelist.txt
im my_lib
Unterverzeichnis:
SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
Aber das funktioniert nicht.
Wie kann ich dies tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den CMake-Befehl target_link_libraries ermöglicht die Angabe von Bibliotheken und Flaggen, wenn die Verknüpfung von einem gegebenen Ziel. Statt direkt mit dem target-Namen
MY_LIB
imTARGET_LINK_LIBRARIES
nennen, eine variable zu verwenden, die schließt den Verweis aufMY_LIB
mit der--whole-archive
und--no-whole-archive
flags: