Android CMake 工具链错误?

标签 android c++11 cmake

我正在尝试使用 CMake 编译我的 Android 应用程序的原生部分。

在我的 CMakeLists.txt 文件中我有这个声明:

append(CMAKE_CXX_FLAGS "-std=c++11")

append 是我自己的函数,定义如下:

function(append VAR)
  set(${VAR} ${${VAR}} ${ARGN} PARENT_SCOPE)
endfunction()

当我为其他平台编译应用程序时,这工作正常,但是当我将 android.toolchain.cmake 添加到混合中时,这一行产生:

... -fno-exceptions -fno-rtti ;-std=c++11 ...

那是 ; 出于某种原因添加在标志之前。这将 bash 命令(对编译器的调用)分成两部分,其中第一部分不完整,第二部分没有意义。

如何告诉 Android 使用 c++11 标准?

最佳答案

您的append() 函数用于附加到列表。 (CMake 命令 list(APPEND) 做同样的事情)。在列表中,元素用分号 分隔。

但是CMAKE_CXX_FLAGS 不是一个列表:它是一个由空格分隔元素组成的字符串。这就是 append() 函数不适用于该变量的原因。


您的代码适用于 CMAKE_CXX_FLAGS 的原始值为空的情况,因此不使用单独的字符。

关于Android CMake 工具链错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576924/

相关文章:

Android 图形内存限制

android - "cannot be cast to"两个图像和搜索栏错误

c++ - C++ 中的 set 和 unordered_set 有什么区别?

cmake - 是否有用于安装项目的跨平台 CMake 命令?

android - gradlew 更改 React Native 构建的 jcenter() URL

java - Android java.lang.ClassCastException : android. widget.RelativeLayout 无法转换为 android.widget.EditText

c++ - 模板引用的类型推导

c++11 - 为什么C++中std::mutex的构造函数不抛出异常?

c++ - 在 CMake 中链接 MySQL 库

c++ - 关于 C/C++/QT 中的条件构建(宏)