我正在使用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" )
and
set ( CMAKE_C_FLAGS "fexceptions")
它仍然显示错误。
请注意,自 2012 年撰写本答案以来,由于 CMake 的发展,此处提供的大多数建议现已过时或不再推荐,但有改进的替代方案可供使用。
假设您想添加这些标志(最好在常量中声明它们):
SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")
有几种方法可以添加它们:
-
最简单的一个(不干净,但简单方便,并且仅适用于编译器标志、C 和 C++):
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
-
附加到相应的 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}")
-
使用目标属性,参见。文档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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)