我正在使用arm-linux-androideabi-g++
编译器.当我尝试编译一个简单的"你好,世界!" 程序编译好.当我通过在该代码中添加一个简单的异常处理来测试它时它也可以工作(添加之后-fexceptions
..我猜它默认是禁用的).
这适用于Android设备,我只想使用CMake,而不是ndk-build
.
例如 - first.cpp
#include <iostream>
using namespace std;
int main()
{
try
{
}
catch (...)
{
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./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" )
Run Code Online (Sandbox Code Playgroud)
和
set ( CMAKE_C_FLAGS "fexceptions")
Run Code Online (Sandbox Code Playgroud)
它仍然显示错误.
我最近在Ubuntu 18.04上安装了Android Studio,以便为Android进行一些本机C ++开发。在编译需要cmake 3.9或更高版本的项目(由于cmake依赖关系)时,我发现Android Studio安装的cmake版本仅为3.6版本。是否有一种干净的方法可以通过SDK Manager升级与Android Studio一起安装的cmake版本?
我正在运行Android Studio版本3.1.3,并从SDK Manager-> SDK工具安装了cmake。
我为我的项目创建了以下 CMakelists.txt,其中包含一些需要用 C 编译的文件,然后与我的 C++ 二进制文件链接。我也在用libasan。
cmake_minimum_required(VERSION 3.0)
SET(GCC_COVERAGE_COMPILE_FLAGS "-g3 -fsanitize=address -fno-omit-frame-pointer")
SET(GCC_COVERAGE_LINK_FLAGS "-fsanitize=address -static-libasan")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
project(ABC_PROXY VERSION 1.0.0 LANGUAGES C CXX)
add_executable(abc_proxy
src/file1.c
src/main.cpp
)
target_include_directories(abc_proxy PRIVATE /home/vishal/cpp_file/new /home/vishal/cpp_file/new/framework)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
Run Code Online (Sandbox Code Playgroud)
在上面的文件中,我只有一个目标二进制文件。但现在我想要 2 个二进制文件。一个将使用 libasan 进行编译,另一个将不使用 libasan 进行编译。如何在 'CMAKE_EXE_LINKER_FLAGS' 、 'CMAKE_CXX_FLAGS' 和 'CMAKE_CXX_FLAGS' 中为每个二进制目标使用不同的标志值?