首页 > 解决方案 > 如何将 -nodefaultlibs 选项添加到 add_executable() 命令?

问题描述

我有 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 文件——我想这个文件描述了用于测试的构建命令。此文件不包含我的选项 -nodefaultlibs。

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

标签: gcccmakeg++

解决方案


-nodefaultlibs是一个链接器标志,所以使用set_target_properties(${bin} PROPERTIES LINK_OPTIONS -nodefaultlibs)or target_link_libraries(${bin} PRIVATE -nodefaultlibs)or 为 CMake 3.2 set_target_properties(${bin} PROPERTIES LINK_FLAGS -nodefaultlibs)

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

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


推荐阅读