Android CMake工具链错误?

问题描述:

我想使用CMake编译我的Android应用程序的本地部分。Android CMake工具链错误?

在我的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标准?

+1

我从来没有在Android上进行过开发,但是您可能希望查看['CXX_STANDARD'](https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html)等属性,而不是设置直接标志。 – Angew

+0

顺便说一下,append()是什么,它从哪里来,它是做什么的?这不是一个内置的CMake命令。 – Angew

+0

@Angew'append()'是我们自己的函数:'''函数(追加VAR) set($ {VAR} $ {$ {VAR}} $ {ARGN} PARENT_SCOPE) endfunction()''' – Ibolit

append()功能是追加到列表。 (CMake命令list(APPEND)也一样)。在列表中,元素用分号分隔。

CMAKE_CXX_FLAGS不是列表:它是空间分隔元素的字符串。这就是为什么append()函数不适用于该变量。


您的代码工作的情况下,当CMAKE_CXX_FLAGS原值是空的,所以不使用独立的性格。