我正在尝试使用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标准?
答案 0 :(得分:2)
您的append()
功能用于附加到列表。 (CMake命令list(APPEND)
也是如此)。在列表元素中用分号分隔。
但是 CMAKE_CXX_FLAGS 不是列表:它是一个空格分隔的元素的字符串。这就是append()
函数不适用于该变量的原因。
您的代码适用于 CMAKE_CXX_FLAGS 的原始值为空的情况,因此不使用单独的字符。