如果链接了共享库,则添加编译选项

时间:2018-05-15 15:24:06

标签: gcc cmake vxworks

我有一个特殊的编译器,在将可执行文件链接到共享库时需要额外的标志-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来防止它与其他目标平台失败。两者都非常丑陋且容易出错。

  3. 我正在寻找一个解决方案,只在工具链/平台/编译器文件中,并且不得对项目进行任何更改。

0 个答案:

没有答案