我正在使用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")
有几种添加方式:
最简单的一种(不是干净的,但是简单又方便,并且仅适用于编译标志,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}")
使用目标属性,请参阅。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] 删除。
我来说两句