我有一个特殊的编译器,在将可执行文件链接到共享库时需要额外的标志-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来防止它与其他目标平台失败。两者都非常丑陋且容易出错。
我正在寻找一个解决方案,只在工具链/平台/编译器文件中,并且不得对项目进行任何更改。