Aslında yapmamda tümleştirmek istediğim harici olarak oluşturulmuş bir kütüphane olan özel bir hedef var.cmake hedef kitaplığı olarak özel hedef
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)
Nasıl bu hedef aslında bir kütüphane olduğunu cmake söyleyebilir, bu bulunabilir ve başlıklar nelerdir?
Net olmak için: Üstteki CMakeList öğesinin el ile belirtilmesi gereken bu kütüphaneyi kullanmak istemiyorum klasörleri ve kütüphane konum klasörü Otomatik olarak yapılmalıdır (hedef özelliklerden). Standart bir cmake kütüphanesinde On
Sadece cmake İlgili -I ve L gcc parametrelerle Uygulamamı bağlantı yapmak için kütüphane CMakeLists içinde INTERFACE_INCLUDE_DIRECTORIES özelliği eklemek gerekir:
set_target_properties(lib1
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR})
Ama durumunda Özel bir hedefin nasıl olduğunu bilmiyorum.
Herhangi bir ipucu?
Yardımlarınız için teşekkürler.
Zaufi sayesinde çalışır! haricen burada cmake içindeki hedef inşa gömülü ilginizi çekebilir Diğerleri için
ne yaptım:
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})
Şimdi bir CMakeLists.txt içinde yapabileceğim somthing
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)
Gerek
gibi .a ve .h'nin nerede olduğunu belirtmek için.
Harika, işe yarıyor, teşekkürler! Sorunun sonunda tam uygulamayı ekledim. – nlko