J'ai une build cmake dans laquelle je recherche un tas de dépendances, c'est-à-dire que j'ai de nombreuses instances de:
FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
include_directories(${SOMEPACKAGE_INCLUDE_DIR})
link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
Maintenant, je veux ajouter une commande personnalisée pour créer un fichier d'en-tête précompilé, mais pour ce faire, je dois connaître tous les chemins ajoutés par mon include_directories
appels. Comment puis-je obtenir une liste de ces répertoires (de préférence avec le format -I/path/to/directory approprié) afin de pouvoir les ajouter à ma commande personnalisée?
Vous pouvez utiliser la commande get_property pour récupérer la valeur de la propriété de répertoire INCLUDE_DIRECTORIES
Quelque chose comme ça:
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
La valeur de cette propriété de répertoire ne suit que les commandes include_directories qui se sont produites précédemment dans le même fichier CMakeLists, ou qui ont été héritées d'occurrences précédentes dans un fichier CMakeLists parent. Si vos commandes find_package et include_directories sont dispersées dans de nombreux sous-répertoires, cela devient un problème difficile.
Si vous arrivez à ce point, vous pouvez envisager de remplacer la commande include_directories par votre propre fonction ou macro et de suivre vous-même les valeurs qui lui sont transmises. Ou, accumulez-les simplement dans une propriété globale ou une variable de cache interne à côté de chaque appel pour inclure les répertoires.
Voir la documentation ici:
http://cmake.org/cmake/help/v2.8.8/cmake.html#command:get_property
http://cmake.org/cmake/help/v2.8.8/cmake.html#prop_dir:INCLUDE_DIRECTORIES
Notre solution pour écrire inclut des répertoires ajoutés par conan dans un fichier
function(output_conan_include_dirs)
set(include_dir_str "")
foreach(DIR ${CONAN_INCLUDE_DIRS})
set(include_dir_str "${include_dir_str}${DIR}\n")
endforeach()
set(pth "${CMAKE_BINARY_DIR}/conan-includes.txt")
file(WRITE "${pth}" "${include_dir_str}")
message(STATUS "Conan include directories written to: ${pth}")
endfunction()
output_conan_include_dirs()