我有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选项的正确方法是什么?
答案 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
中。