Ich habe ein benutzerdefiniertes Ziel, das ist in der Tat eine extern generierte Bibliothek, die ich in meinem Build integrieren möchte.benutzerdefinierte Ziel als Zielbibliothek 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)
Wie kann ich Cmake sagen, dass dieses Ziel in der Tat ist eine Bibliothek, , wo es gefunden und wo werden kann, sind die Header?
Um klar zu sein: Ich möchte nicht die obere CMakeList mit dieser Bibliothek manuell Include-Ordner angeben und die Bibliothek Speicherortordner Es muss automatisch erfolgen (von den Zieleigenschaften).
Auf einem Standard Cmake Bibliothek würde ich nur die INTERFACE_INCLUDE_DIRECTORIES Eigenschaft in der Bibliothek CMakeLists hinzufügen müssen, um Cmake meine app zu machen Verknüpfung mit dem entsprechenden -I und -L gcc Parameter:
set_target_properties(lib1
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR})
Aber im Fall von einem benutzerdefinierten Ziel weiß ich nicht, wie ich dazu.
Irgendwelche Hinweise?
Danke für Ihre Hilfe.
Danke an zaufi es funktioniert!
Für andere, die interessiert sein könnten hier Ziel innerhalb Cmake extern bauen eingebettet ist, was ich tat:
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})
Jetzt in einem CMakeLists.txt kann ich somthing wie
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)
Keine Notwendigkeit tun um anzugeben, wo die .a und die .h sind.
Super, es funktioniert, Danke! Ich habe die vollständige Implementierung am Ende meiner Frage hinzugefügt. – nlko