J'ai 2 dossiers "inc" et "lib" dans mon projet qui ont respectivement des en-têtes et des bibliothèques statiques. Comment puis-je dire à cmake d'utiliser ces 2 répertoires pour l'inclusion et la liaison, respectivement?
Le moyen le plus simple de le faire serait d’ajouter
include_directories(${CMAKE_SOURCE_DIR}/inc)
link_directories(${CMAKE_SOURCE_DIR}/lib)
add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # libbar.so is found in ${CMAKE_SOURCE_DIR}/lib
La version moderne de CMake qui n'ajoute pas les drapeaux -I and -L
À chaque appel du compilateur consisterait à utiliser les bibliothèques importées:
add_library(bar SHARED IMPORTED) # or STATIC instead of SHARED
set_target_properties(bar PROPERTIES
IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/lib/libbar.so"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include/libbar"
)
set(FOO_SRCS "foo.cpp")
add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # also adds the required include path
Si le réglage de INTERFACE_INCLUDE_DIRECTORIES
N'ajoute pas le chemin, les anciennes versions de CMake vous permettent également d'utiliser target_include_directories(bar PUBLIC /path/to/include)
. Cependant, ceci ne fonctionne plus avec CMake 3.6 ou plus récent.