2017-03-03 72 views
1

我想使用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

回答

2

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

CMAKE_CXX_FLAGS不是列表:它是空間分隔元素的字符串。這就是爲什麼append()函數不適用於該變量。


您的代碼工作的情況下,當CMAKE_CXX_FLAGS原值是空的,所以不使用獨立的性格。