为了账号安全,请及时绑定邮箱和手机立即绑定

如何在CMake文件中添加链接器或编译标志?

/ 猿问

如何在CMake文件中添加链接器或编译标志?


如何在CMake文件中添加链接器或编译标志?

我正在使用arm-linux-androideabi-g++编译器。当我尝试编译一个简单的“你好,世界!” 程序编译好。当我通过在该代码中添加一个简单的异常处理来测试它时它也可以工作(添加之后-fexceptions..我猜它默认是禁用的)。

这适用于Android设备,我只想使用CMake,而不是ndk-build

例如 - first.cpp

#include <iostream>using namespace std;int main(){
   try{
   }
   catch(...)
   {
   }
   return 0;}

./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions

它没有问题......

问题 ...我试图用CMake文件编译文件。

我想添加-fexceptions标志。我试过了

set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )

set ( CMAKE_C_FLAGS "fexceptions")

它仍然显示错误。


查看完整描述

3 回答

?
尚方宝剑之说

假设您要添加这些标志(最好将它们声明为常量):

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")SET(GCC_COVERAGE_LINK_FLAGS    "-lgcov")

有几种方法可以添加它们:

  1. 最简单的(不干净,但简单方便,只适用于编译标志,C&C ++一次):

    add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
  2. 附加到相应的CMake变量:

    SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
  3. 使用目标属性,参见 doc CMake编译标志目标属性,需要知道目标名称。

    get_target_property(TEMP ${THE_TARGET} COMPILE_FLAGS)if(TEMP STREQUAL "TEMP-NOTFOUND")
      SET(TEMP "") # Set to empty stringelse()
      SET(TEMP "${TEMP} ") # A space to cleanly separate from existing contentendif()# Append our valuesSET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" )set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )

现在我使用方法2。


查看完整回答
反对 回复 2019-08-15
?
三国纷争

在较新版本的CMake中,您可以分别使用target_compile_options和设置单个目标的编译器和链接器标志target_link_libraries(是的,后者也设置链接器选项):

target_compile_options(first-test PRIVATE -fexceptions)

这种方法的优点是你可以控制选项传播到依赖于这个PUBLIC和/的其他目标PRIVATE

从CMake 3.13开始,您还可以使用target_link_options添加链接器选项,使意图更清晰。


查看完整回答
反对 回复 2019-08-15
?
天天世纪

尝试设置变量CMAKE_CXX_FLAGS而不是CMAKE_C_FLAGS

set (CMAKE_CXX_FLAGS "-fexceptions")

该变量CMAKE_C_FLAGS仅影响C编译器,但您正在编译C ++代码。

添加标志CMAKE_EXE_LINKER_FLAGS是多余的。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 459 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信