cmake target_link_libraries - PullRequest
       4

cmake target_link_libraries

2 голосов
/ 23 декабря 2011

У меня есть несколько target_link_libraries:

add_library(x x.cc)
target_link_libraries(x depX1 depX2 depX3)
add_executable(exe exe.cc)
target_link_libraries(exe x ${shared_lib1} ${shared_lib2})

Что приводит к exe-связыванию с x и зависимостям x: depx1, depx2 и т. Д. Проблема в том, что shared_libs вставляются между x и зависимостями x, и это не приемлемо в g ++ 4.6 (это работало в более старых версиях).

Как исправить? Мне нужно поместить разделяемые библиотеки в конец строки компиляции, как я указал в файле CMakeLists.txt. Поэтому я не хочу, чтобы они вставлялись, я хочу, чтобы они были в конце строки компиляции. Также обратите внимание, что у depx1, depx2 depx3 и т. Д. Также есть свои собственные зависимости, поэтому единственное, что мне нужно, это чтобы общие библиотеки появлялись в конце строки компиляции.

Как это сделать с помощью cmake? Спасибо

- ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ2-- => РЕШЕНО Это можно решить с помощью некрасивого хака:

add_custom_command(TARGET TargetName
                   PRE_LINK COMMAND ${PROJECT_SOURCE_DIR}/custom_script.sh 
                   ARGS ${PROJECT_BINARY_DIR}/src/TargetName/CMakeFiles/TargetName.dir/link.txt)

где src / TargetName / CMakeFiles / TargetName.dir / link.txt - это командная строка ссылки, которую создает CMake, а custom_script.sh - скрипт, который анализирует файл и размещает библиотеки динамических ссылок в конце строки компиляции.

- ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ--
Так что я понимаю, что с текущим CMake и отсутствием возможности поместить разделяемые библиотеки в конец строки компиляции и с g ++ 4.6 все ломается! Это круто!

1 Ответ

0 голосов
/ 28 декабря 2011

Вы пытались повторить зависимости x?Например:

target_link_libraries (exe x depX1 depX2 depX3 $ {shared_lib1} $ {shared_lib2})

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