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

索尔蒂

我正在使用arm-linux-androideabi-g++编译器。当我尝试编译一个简单的“ Hello,World!”时 程序可以编译良好。当我通过在该代码中添加简单的异常处理来对其进行测试时,它也可以工作(添加-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")

它仍然显示错误。

安全

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

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 string
    else()
      SET(TEMP "${TEMP} ") # A space to cleanly separate from existing content
    endif()
    # Append our values
    SET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" )
    set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )
    

现在我使用方法2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在CMake中添加“ -l”(ell)编译器标志

如何在Windows的cmake中添加编译标志?

如何使CMake附加链接器标志而不是在它们之前添加?

如何在 cmake 中设置编译器特定标志

cmake:如何根据当前编译器版本添加编译器标志

如何在代码块中向编译器添加标志?

在CMake中添加全局编译标志

CMake中的C ++链接器标志

如何在cmake中添加对自定义android编译器的支持?

如何可靠地修改构建配置并在C / C ++ RPM文件中添加编译器标志?

cmake如何在C ++中将编译器标志附加到末尾

如何将标志传递给CMAKE中的nvcc编译器

如何使用CMake在链接命令行的末尾添加标志?

CMAKE脚本中的编译器标志设置

定制命令中的Cmake(<3.6)编译器标志

如何在cmake中自动查找编译器路径?

如何使用XCode中的链接器标志链接File.framework文件?

添加C ++编译器,在ubuntu中将链接器标志链接到nsight eclipse 6.5

如何在msvc中编译和链接生成的文件?

使用Fastlane时,如何在gym中添加swift编译标志

如何在Dymola 2019 FD01中为Visual Studio编译器利用编译器标志

如何从 cython 安装文件中删除 -pthread 编译器标志

QMake-如何以及在何处添加链接器标志?

CMake Fortran编译器相关标志

CMake编译器独立标志

如何在monodevelop中添加ac / c ++编译器?

如何在我的ctest cmake文件中添加-j选项?

如何在cmake中向目标文件添加依赖项

删除debuild buildsystem = cmake链接器标志