J'essaie de construire OpenAL avec le NDK Android. La licence exige que la bibliothèque soit chargée dynamiquement. Je reçois le message suivant lors de la tentative de compilation :
CMake Warning (dev) at CMakeLists.txt:1032 (ADD_LIBRARY):
ADD_LIBRARY called with SHARED option but the target platform does not
support dynamic linking. Building a STATIC library instead. This may lead
to problems.
Mon fichier toolchain comprend SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true)
et ressemble à ceci :
SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_C_COMPILER "${HOST}-gcc")
SET(CMAKE_CXX_COMPILER "${HOST}-g++")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
set(ENV{PKG_CONFIG_PATH} "")
SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true)
Je crée un build
dans la source et invoquez cmake avec ce qui suit :
cmake .. -DALSOFT_BACKEND_WAVE=0 -DALSOFT_REQUIRE_OPENSL=1 -DALSOFT_NO_CONFIG_UTIL=1 -DALSOFT_EXAMPLES=0 -DALSOFT_UTILS=0 -DALSOFT_CONFIG=0 -DCMAKE_INSTALL_PREFIX=$ANDROID_DEV/opt -DCMAKE_INSTALL_RPATH=$ANDROID_DEV/opt -DHOST= -DCMAKE_TOOLCHAIN_FILE=../../android-toolchain.cmake
J'ai vérifié que le fichier de la chaîne d'outils est chargé en y ajoutant des déchets et en voyant la commande cmake donner lieu à une erreur.
Le site CMakeLists.txt
commence comme ceci :
# CMake build file list for OpenAL
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(OpenAL)
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW)
CMAKE_POLICY(SET CMP0005 NEW)
ENDIF(COMMAND CMAKE_POLICY)
SET(CMAKE_MODULE_PATH "${OpenAL_SOURCE_DIR}/cmake")
J'ai réussi à construire la bibliothèque comme un module dynamique en plaçant SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true)
en CMakeList.txt
immédiatement après le PROJECT(OpenAL)
. Si je le place avant, le résultat de la construction est une bibliothèque statique avec l'avertissement mentionné précédemment.
Il semble que la propriété TARGET_SUPPORTS_SHARED_LIBS
est remis à zéro après PROJECT(OpenAL)
. J'ai lu la documetnation pour PROJECT
, TARGET_SUPPORTS_SHARED_LIBS
et incluant un fichier toolchain mais je n'ai rien trouvé qui mentionne explicitement la réinitialisation des variables toolchain cibles.
Est-ce que CMake a des règles qui font que cette variable est réinitialisée entre le fichier toolchain et le traitement de CMakeLists.txt, ou peut-être avant et après le traitement de CMakeLists.txt ? PROJECT
commande ?
J'utilise CMake 2.8.12.2. Chaque fois que je lance la commande CMake, je le fais avec une nouvelle copie du répertoire source pour m'assurer qu'il n'y a pas de problème de cache.