У меня есть несколько 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 все ломается! Это круто!