gcc - 如何将 -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 选项的正确方法是什么?
解决方案
-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
.
推荐阅读
- r - ggplot中的条形图-躲避位置+计数
- azure - 从 Azure 逻辑应用运行珍珠脚本
- verilog - 表达式宽度 32 与逻辑门阵列端口 1 的宽度 1 不匹配
- c++ - 当我使用客户端模拟器对其进行测试时,IOCP Socket Worker 线程的工作速度太慢了
- algorithm - 使用最速下降算法解决无约束优化问题
- sqlite - 是否有关于 GROUP BY 查询中的非聚合列的保证?
- javascript - 使用后端 Laravel 在 Reactjs 应用程序中的复选框上过滤数据
- c# - 通过 API for Identity 服务器远程更改密码
- vba - 如何提取商店的电子邮件地址?
- pandas - 使用python从html中提取表数据,其中行存储在div中