указание флагов ссылок только для одной статической библиотеки при компоновке исполняемого файла - PullRequest
9 голосов
/ 17 апреля 2011

У меня есть исполняемый файл, созданный из нескольких объектных файлов и связанный с несколькими статическими и общими библиотеками. Я хочу указать параметр компоновщика -Wl, -whole-archive для одной из связанных библиотек.

Например, из этой команды:

/usr/bin/c++ _objectFiles_ -o _myExec_  _someCommonOptions_  _myLibraries_ -Wl,-rpath _path to libs_

Я хочу получить эту команду:

/usr/bin/c++ _objectFiles_ -o _myExec_  _someCommonOptions_  _allOtherLibs_ \
  -Wl,-whole-archive _one particular lib_ -Wl,-no_whole-archive -Wl,-rpath _path to libs_

Можно ли как-нибудь добиться этого с помощью cmake? Как я понимаю, когда я добавляю что-то вроде

set_target_properties(myExec PROPERTIES LINK_FLAGS "-Wl,-whole-archive")

затем -whole-archive параметры установлены для всех связанных библиотек, и это определенно не то, что я хочу.

Спасибо.

Ответы [ 2 ]

33 голосов
/ 17 апреля 2011

Этот поток Связывание статических библиотек в разделяемые библиотеки? имеет метод для этого.

SET (MYLIB -Wl,--whole-archive my_particular_lib -Wl,--no-whole-archive)
....
TARGET_LINK_LIBRARIES(yourtarget ${normalstuff} ${MYLIB} ${othernormalstuff})

CMake docs состояние:

Если имя библиотеки совпадает с именем другая цель в проекте зависимость будет автоматически добавлена в системе сборки, чтобы убедиться, что библиотека, которая связана, актуальна перед целевыми ссылками. Имена предметов начиная с '-', но не с '-l' или '-рамка', рассматривается как линкер флаги.

Таким образом, параметры -Wl не должны мешать / касаться CMake.

3 голосов
/ 14 ноября 2016
TARGET_LINK_LIBRARIES(myTarget -Wl,--whole-archive myLib -Wl,--no-whole-archive)

Просто замените myTarget и myLib

Оригинальный пост: https://stackoverflow.com/a/37564428/1052261

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...