2015-07-07 27 views
6

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.

cevap

9

add_library()'u kullanabilir ve bunun aslında imported olduğunu söyleyebilirsiniz. Ardından, set_target_properties() kullanarak, bunun için gerekli INTERFACE_XXX özelliklerini ayarlayabilirsiniz. Bundan sonra, projeniz tarafından oluşturulan her biri gibi sıradan bir hedef olarak kullanabilirsiniz.

+0

Harika, işe yarıyor, teşekkürler! Sorunun sonunda tam uygulamayı ekledim. – nlko