2010-08-23 23 views
21

Yükleme (TARGETS ...) add_subdirectory ile eklenen dizinlerde tanımlanan hedeflerle kullanmak mümkün mü?install (TARGETS ...) ve add_subdirectory

Kullanım durumum, e.gg dosyasını gt için bir rpm oluşturmak istiyorum. gtest projesi herhangi bir kurulum ifadesi olmadan bir CMakeLists.txt dosyasına sahip olur. Bu ifadeleri gtest'in CMakeLists.txt dosyasına eklemeden paketi oluşturmak istiyorum.

Bu çıkan dizin yapısı vardır:

+ gtest-1.5.0/... 
+ CMakeLists.txt 

GTEST-1.5.0 ait CMakeLists böyle kütüphaneleri tanımlar:

cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc) 
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc) 
target_link_libraries(gtest_main gtest) 

şimdi benim CMakeLists böyle bir şey eklemek istiyorum. txt:

add_subdirectory(gtest-1.5.0) 
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib) 

ama cmake düzgün devletleri:

CMake Error at CMakeLists.txt:10 (install): 
    install TARGETS given target "gtest" which does not exist in this 
    directory. 

Bunu gtest-1.5.0 yama olmadan yapmanın bir yolu var mı?

cevap

8

Yükleme hedefleri yerine dosya yüklemeyi kullanmayı deneyebilirsiniz. Dezavantajı, paylaşılan ve statik yapıları ele almak zorunda kalacak olmasıdır.

install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)

+0

Tamam .. Bu işe yarayabilir, ama target_link_libraries tanımlanan adları kullanın ve komutları yükleyemezsiniz neden ben, anlamıyorum! – Gizmomogwai

+2

Yükleme komutu, tüm hedefleri taranan target_link_libraries'in aksine, bir hedefin var olup olmadığını belirlerken yalnızca geçerli dizine bakar. – RobertJMaynard

+0

Tamam ... açıklama için teşekkürler, böyle bir şey düşündüm, ama emin değilim (Eğer yükleme (FILES ARCHIVE parametresini almaz çünkü) (FILES komutunu düzenleyebilir misin). – Gizmomogwai