2015-02-19 3 views
9

У меня есть 2 папки «inc» и «lib» в моем проекте, у которых есть заголовки и статические библиотеки соответственно. Как сообщить cmake использовать эти 2 каталога для включения и ссылки соответственно?Как добавить путь библиотеки в cmake?

ответ

18

Самый простой способ сделать это было бы добавить

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 

современной версии CMake, которая не добавляет -I and -L флаги каждого компилятора вызов будет использовать импортированные библиотеки:

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 

Если установка INTERFACE_INCLUDE_DIRECTORIES не добавляет путь, более старые версии CMake также позволяют использовать target_include_directories(bar PUBLIC /path/to/include). Однако это no longer works с CMake 3.6 или новее.

+0

Получил эту ошибку с CMake 3.6: Ошибка CMake в ... snip .../CMakeLists.txt: 8 (target_include_directories): Невозможно указать включенные каталоги для импортированного целевого «myBar». – nodakai

+1

Действительно, я обновил свой ответ, и теперь он работает для меня с CMake 3.8 – ar31

+0

'link_directories (

)', это именно то, что нужно. – parasrish

Смежные вопросы