Comment utiliser CMake ExternalProject_Add ou des solutions de rechange dans une plate-forme de chemin?

Je voudrais construire une troisième partie du projet qui a déjà CMake dans le cadre de mon projet de CMake bandes. ExternalProject_Add est pour ce but, mais j'ai trouvé qu'il ne peut être fait de travailler avec un générateur, et je voulais travailler sur de nombreuses plates-formes facilement.

Par exemple voici mon projet externe ajouter un script pour zlib, qui dispose de sa propre CMakeLists.txt:

 set(USE_PROJECT_CMAKE_MODULE_PATH "-DCMAKE_MODULE_PATH=${MAKE_MODULE_PATH}")
ExternalProject_Add(ZLIB
                    SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/zlib
                    DOWNLOAD_COMMAND ""
                    UPDATE_COMMAND ""
                    CMAKE_ARGS 
                       -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> 
                       -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} 
                       -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} 
                       -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                       ${USE_PROJECT_CMAKE_MODULE_PATH}
                    INSTALL_COMMAND "")

ExternalProject_Add_Step(ZLIB installInternally
                         COMMAND cd <BINARY_DIR> && make install
                         DEPENDEES install
                         ALWAYS 1)
ExternalProject_Get_Property(ZLIB install_dir)

if(UNIX)
   set(ZLIB_NAME libz)
else(UNIX)
   set(ZLIB_NAME zlib)
endif(UNIX)

add_library(zlib UNKNOWN IMPORTED)
set_property(TARGET zlib PROPERTY IMPORTED_LOCATION ${install_dir}/lib/${ZLIB_NAME}.a)
set(ZLIB_LIBRARIES zlib)
set(ZLIB_LIBRARIES_OPTIONAL ${ZLIB_LIBRARIES})
set(ZLIB_DIR ${install_dir} CACHE INTERNAL "zlib ROOT dir")
set(ZLIB_INCLUDE_DIRS ${install_dir}/include CACHE INTERNAL "zlib include dirs")
set(ZLIB_DEFINES "-msse2 -mfpmath=sse" CACHE INTERNAL "zlib defines")

Le problème, c'est qu'il fonctionne avec faire, mais pas avec Xcode ou Visual Studio. Peut-être il ya une certaine façon de prendre le cmake construire commandes transmises à mon projet et de les transmettre à ExternalProject_Add.

Comment puis-je écrire ExternalProject_Add appels en une croix-plate-forme de chemin avec un minimum de complexité de code, ou est-il une meilleure alternative?

  • Trouvé un autre outil qui peut servir à cette fin: conan.io
InformationsquelleAutor Andrew Hundt | 2013-05-30