2015-02-19 11 views

risposta

18

Il modo più semplice per farlo sarebbe quello di aggiungere

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 moderna versione di CMake che non aggiunge i -I and -L bandiere per ogni chiamata del compilatore potrebbe essere quella di utilizzare le librerie importate:

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 

Se l'impostazione di INTERFACE_INCLUDE_DIRECTORIES non aggiunge il percorso, le versioni precedenti di CMake consentono anche di utilizzare target_include_directories(bar PUBLIC /path/to/include). Tuttavia, questo no longer works con CMake 3.6 o successivo.

+0

Si è verificato questo errore con CMake 3.6: errore CMake in ... snip .../CMakeLists.txt: 8 (target_include_directories): Impossibile specificare le directory di inclusione per il target importato "myBar". – nodakai

+1

Infatti, ho aggiornato la mia risposta e ora funziona per me con CMake 3.8 – ar31

+0

'link_directories (

)', è esattamente quello che cerca. – parasrish

Problemi correlati