У меня есть специальный компилятор, которому нужен дополнительный флаг -non-static
при связывании исполняемого файла с общей библиотекой:
gcc main.cpp -non-static -lshared -o main
(Примечание: это компилятор для vxworks)
Как я могу сделать это в CMake?
Решения, которые я использовал до сих пор (но не удовлетворяющие):
Всегда установлен -non-static
в файле цепочки инструментов.Работает, но имеет нежелательные побочные эффекты, когда вам не нужна общая библиотека.
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-non-static")
Создайте библиотеку INTERFACE
с набором параметров компиляции -non-static
.Однако каждый новый проект должен переписывать это, и каждый исполняемый файл должен связывать эту библиотеку (если она связывает какую-либо общую библиотеку):
add_library(allwaysLinkMe INTERFACE)
if(CMAKE_SYSTEM_NAME STREQUALS "VxWorks")
target_link_libraries(allwaysLinkMe INTERFACE "-non-static")
endif()
add_library(shared SHARED a.cpp)
add_executatble(main main.cpp)
target_link_libraries(main shared allwaysLinkMe)
Или я связываю эту библиотеку со всеми другими общими библиотеками:
add_library(shared SHARED a.cpp)
target_link_libraries(shared allwaysLinkMe)
add_executatble(main main.cpp)
target_link_libraries(main shared)
В обоих случаях я должен использовать ifs, чтобы избежать сбоя на других целевых платформах.Кроме того, оба довольно уродливы и подвержены ошибкам.
Я ищу решение, которое находится только в файле (ах) toolchain / platform / compiler, и никаких изменений в проекте не должно бытьсделал.