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?

InformationsquelleAutor Lilás | 2013-07-04
Schreibe einen Kommentar