2017-02-06 4 views
0

cmake, связанный с NDK, используется по умолчанию, но он определяет так много параметров. Один из них -Переопределить android.toolchain.cmake в andorid cmake build

elseif(ANDROID_STL STREQUAL gnustl_shared) 
    set(ANDROID_STL_STATIC_LIBRARIES 
     supc++) 
    set(ANDROID_STL_SHARED_LIBRARIES 
     gnustl_shared) 

Теперь я хочу, чтобы gnustl_shared использовать, но не supC++, и я не могу найти в любом случае, чтобы сделать это. Удаление его вручную из android.toolchain.cmake работает для меня. Но я не хочу редактировать файл cmake-файла ndk toolchain на каждой машине. В CMakeLists.txt моего приложения, я попытался

list(FILTER ANDROID_STL_STATIC_LIBRARIES EXCLUDE REGEX ".*supc.*") 
list(FILTER CMAKE_CXX_STANDARD_LIBRARIES_INIT EXCLUDE REGEX ".*supc.*") 

Но каждый раз, в сгенерированном файле build.ninja, я вижу libsupC++. В LINK_LIBRARIES.

Есть ли чистый способ для меня исключить эту библиотеку при связывании?

+0

Когда я смотрю в 'android.toolchain. cmake' Я вижу, что 'ANDROID_STL_STATIC_LIBRARIES' переносится в' ANDROID_CXX_STANDARD_LIBRARIES', который используется для 'CMAKE_CXX_STANDARD_LIBRARIE S'. Поэтому я бы предположил, что изменение позже решит вашу проблему. Но это не список, это пространство разделено. Вы пробовали что-то вроде 'string (REPLACE" supC++ "" "CMAKE_CXX_STANDARD_LIBRARIES" $ {CMAKE_CXX_STANDARD_LIBRARIES} ")'? – Florian

+0

Это сработало !!! Большое спасибо. Но глядя на файл ndk cmake, как вы узнали, что ANDROID_STL_STATIC_LIBRARIES идет в CMAKE_CXX_STANDARD_LIBRARIES ?? Я не мог найти такую ​​ссылку !! – tosif24

+0

Добро пожаловать. В версии, которую я изучил, это было так (я связал источник в своем ответе). Но даже если это будет 'CMAKE_CXX_STANDARD_LIBRARIES_INIT', он, наконец, окажется в' CMAKE_CXX_STANDARD_LIBRARIES'. – Florian

ответ

2

Повернувшись мой комментарий в ответ

Когда я смотрю в android.toolchain.cmake я вижу, что ANDROID_STL_STATIC_LIBRARIES передается ANDROID_CXX_STANDARD_LIBRARIES, который используется для CMAKE_CXX_STANDARD_LIBRARIES.

Поэтому я изменяю позже, чтобы решить вашу проблему. Но это не список, это пространство, отделенное и вы должны сделать:

string(REPLACE "supc++" "" CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}") 

Ссылки

Смежные вопросы