gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:30:07 26 4
gpt4 key购买 nike

我正在使用 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.cpp -fexceptions

它工作没有问题......

问题 ...我正在尝试使用 CMake 文件编译该文件。

我想添加 -fexceptions 作为标志。我尝试过

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

set ( CMAKE_C_FLAGS "fexceptions")

它仍然显示错误。

最佳答案

<小时/>

请注意,由于自 2012 年撰写本答案以来 CMake 的发展,此处提供的大多数建议现已过时或不再推荐,但有改进的替代方案可供使用。

<小时/>

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

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. 使用目标属性,参见。文档CMake compile flag target property并且需要知道目标名称。

    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。

关于c++ - 如何在 CMake 文件中添加链接器或编译标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com