Ho un target personalizzato che è in realtà una libreria generata esternamente che voglio integrare nella mia build.target personalizzato come libreria di destinazione in cmake
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/liblib2.a
COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/makefile liblib2.a)
add_custom_target(lib2
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/liblib2.a)
Come faccio a sapere CMake che questo obiettivo è in realtà una libreria, dove si può trovare e dove sono le intestazioni?
Per essere chiari: Non voglio che la parte superiore di CMakeList che utilizza questa libreria debba specificare manualmente le cartelle di inclusione e la cartella di ubicazione della libreria Deve essere eseguita automaticamente (dalle proprietà di destinazione).
Su una libreria standard di CMake Vorrei solo avere per aggiungere la proprietà INTERFACE_INCLUDE_DIRECTORIES nelle CMakeLists biblioteca per fare CMake collegare il mio app con la -I parametri pertinenti e gcc -L:
set_target_properties(lib1
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR})
Ma nel caso di un obiettivo personalizzato non so come farlo.
Qualsiasi indizio?
Grazie per il vostro aiuto.
Grazie a zaufi funziona!
Per gli altri che potrebbero essere interessati a costruire incorporato esternamente bersaglio all'interno cmake qui è quello che ho fatto:
cmake_minimum_required(VERSION 2.8)
SET(LIB_FILE ${CMAKE_CURRENT_SOURCE_DIR}/bin/liblib2.a)
SET(LIB_HEADER_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/include)
# how to build the result of the library
add_custom_command(OUTPUT ${LIB_FILE}
COMMAND make
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# create a target out of the library compilation result
add_custom_target(lib2_target DEPENDS ${LIB_FILE})
# create an library target out of the library compilation result
add_library(lib2 STATIC IMPORTED GLOBAL)
add_dependencies(lib2 lib2_target)
# specify where the library is and where to find the headers
set_target_properties(lib2
PROPERTIES
IMPORTED_LOCATION ${LIB_FILE}
INTERFACE_INCLUDE_DIRECTORIES ${LIB_HEADER_FOLDER})
Ora in una CMakeLists.txt posso fare somthing come
add_subdirectory(${ROOT_DIR}/lib1 bin/lib1)
add_subdirectory(${ROOT_DIR}/lib2 bin/lib2)
add_executable(app app.c)
target_link_libraries(app lib1 lib2)
Non c'è bisogno per specificare dove sono .a e .h.
Impressionante, funziona, grazie! Ho aggiunto l'implementazione completa alla fine della mia domanda. – nlko