web-dev-qa-db-fra.com

Comment ajouter un chemin de bibliothèque dans cmake?

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?

38
grasevski

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.

62
ar31