Добавить опцию компиляции, если совместно используемая библиотека связана - PullRequest
0 голосов
/ 15 мая 2018

У меня есть специальный компилятор, которому нужен дополнительный флаг -non-static при связывании исполняемого файла с общей библиотекой:

gcc main.cpp -non-static -lshared -o main

(Примечание: это компилятор для vxworks)

Как я могу сделать это в CMake?

Решения, которые я использовал до сих пор (но не удовлетворяющие):

  1. Всегда установлен -non-staticв файле цепочки инструментов.Работает, но имеет нежелательные побочные эффекты, когда вам не нужна общая библиотека.

    set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-non-static")
    
  2. Создайте библиотеку 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, и никаких изменений в проекте не должно бытьсделал.

...