如何将-nodefaultlibs选项添加到add_executable()命令?

时间:2018-12-24 10:52:07

标签: gcc cmake g++

我有CMakeLists.txt,可以使用g ++进行测试:

file(GLOB sources *.cpp)
foreach(src ${sources})
    get_filename_component(src ${src} NAME_WE)
    string(REPLACE "our_prefix" "" bin ${src})
    add_executable(${bin} ${src})
    target_link_libraries(${bin} our options go here) 
endforeach()

我需要做的是向每个测试中添加选项-nodefaultlibs。我试图这样做:

file(GLOB sources *.cpp)
foreach(src ${sources})
    get_filename_component(src ${src} NAME_WE)
    string(REPLACE "our_prefix" "" bin ${src})
    add_executable(${bin} ${src})
    set_target_properties(${bin} PROPERTIES 
        INTERFACE_COMPILE_OPTIONS "-nodefaultlibs"
    )
    target_link_libraries(${bin} our options go here) 
endforeach()

但这似乎没有效果。我还尝试使用命令 target_compile_options 代替 set_target_properties -它也无效。

Cmake为每个测试生成link.txt文件-我想这个文件描述了用于测试的build命令。该文件不包含我的选项-nodefaultlibs。

您能否解释一下添加-nodefaultlibs选项的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

-nodefaultlibs是一个链接器标志,因此请使用set_target_properties(${bin} PROPERTIES LINK_OPTIONS -nodefaultlibs)target_link_libraries(${bin} PRIVATE -nodefaultlibs)或对于CMake 3.2 set_target_properties(${bin} PROPERTIES LINK_FLAGS -nodefaultlibs)

INTERFACE_COMPILE_OPTIONS用于其他用途,target_compile_options不会显示在链接行上。

并非总是生成link.txt文件。使用MSYS Makefiles时,链接器标志会显示在linklibs.rsp中。