我正在尝试使用 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/