Hedefin bağımlılığını bir dış kütüphane üzerinde doğru şekilde yönetmeye çalışıyorum ve bir şekilde başarılı olamıyorum. Eğitici, yazı ve örneklerini okudum, ama yine de CMake için yeni olduğumdan, sanırım belli bir şeyi kaçırdım.CMake bağımlılıkları: dış kitaplıktaki zorlamayı yeniden oluşturma
Kurulum aşağıdaki gibidir. Başka bir (CMake desteklenmeyen) dilde yerleşik bir dış kütüphane bir libadatest.a üretir. Bunun için ExternalProject_Add kullandım. Daha sonra, bu lib'i kullanan başka bir düzenli C hedefi var. Her şey iyi çalışıyor, ama eğer orijinal lib'i değiştirirsem, yeniden derlesem bile, C hedefi yeniden derlenmez. İşte tam bir örnek. Ben teşebbüs ettik ne
cmake_minimum_required(VERSION 2.8)
include(ExternalProject)
ExternalProject_Add(
AdaTestExternal # Not important
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
BUILD_COMMAND gprbuild -P${CMAKE_CURRENT_SOURCE_DIR}/adalibtest -XOBJ_DIR=${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} -XLIB_DIR=${CMAKE_CURRENT_BINARY_DIR}
ALWAYS 1 # Force build, gprbuild will take care of dependencies
# BUILD_ALWAYS 1 # For 3.0 higher versions?
INSTALL_COMMAND ""
)
add_custom_target(AdaTest DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libadatest.a)
link_directories(${CMAKE_CURRENT_BINARY_DIR}) # Needed or won't find it
add_executable(main_ada main.c)
add_dependencies(main_ada AdaTest) # We must depend on the final output lib
target_link_libraries(main_ada adatest)
gerçek kütüphanesine bağlı bir ara özel hedeflerini oluşturmak ve sırayla ana C hedef bu hedefe bağlıdır olun: Ben CMake 2.8.12 kullanıyorum.
Harici olarak oluşturulmuş kitaplığı (libadatest.a) kaldırdığımda, bu kural doğru olarak yeniden derlenir ancak ana yürütülebilir dosya yeniden bağlanmaz. Kütüphanenin zaman damgasının, onu kullanan yürütülebilir dosyadan daha taze olduğu açıkça görülüyor.
Düzenleme: Ben de aynı olumsuz sonuçla, yerine, özel hedefin bu denedim:
add_library(AdaTest
UNKNOWN IMPORTED
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/libadatest.a)