2012-04-04 21 views
12

dizin yapısı var şu diyelim değil bağımlılık ekleyin:cmake: alt dizininde

root 
    | 
    +--projects 
    |  | 
    |  +-test 
    |   | 
    |   +-CMakeFiles.txt 
    | 
    +--libs 
     | 
     +-testlib 
      | 
      +-CMakeFiles.txt 

testi CMakeFiles.txt içerir ve testlib da CMakeFiles.txt içerir. "test" çalıştırılabilir ve "testlib" statik kitaplık üretir.

"Testlib" ile bağlantı kurmaksızın "test" ile bağlantı kurmak ve "test" kütüphanesini "test" içindeki alt dizine taşımadan "test" yapmak istiyorum. Ben Testin CMakeFiles.txt yılında

add_subdirectory("../../libs/testlib") 

yapamaz

"testlib" "test" nin bir alt dizin olmadığından, - cmake "testlib" "test" alt dizininde olmama şikayet edecek .

Ayrıca, sistem birkaç farklı derleyiciye sahip olduğundan, "testlib" kitaplıklarını bir tür merkezi dizine yükleyemiyorum, bu yüzden testlib'in yerel kopyasını derlemek ve onunla bağlantı kurmak için test yapmak istiyorum (örneğin, testlib olduğu gibi bir alt dizin). Ayrıca, değiştirildiyse "testlib" yi otomatik olarak yeniden oluşturmak için "test" projesi istiyorum.

Peki, nasıl başa çıkabilirim? cmake 2.8.4, winxp sp3.

cevap

14

root'da üst düzey bir CMakeLists.txt sağlayabilir veya add_subdirectory komutuna ikili bir dizin sağlayabilirsiniz; Örneğin.

add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build") 

Bu

bir testlib için oluşturulan proje dosyalarını içeren mevcut yapı dizinde testlib_build denilen alt dizin, ancak kaynak oluşturur. Daha fazla bilgi almak için

,

cmake --help-command ADD_SUBDIRECTORY 
+0

Teşekkür yürütülen - tam ihtiyacım buydu. – SigTerm

+0

@Fraser - testlib_build'nin CMakeFile dizininde ikili dizini belirtmek mümkün müdür? – tower120

+0

@ tower120 - Hayır, bunu 'add_subdirectory' aramasında belirtmeniz gerekir. – Fraser

10

bunu yapmak için bkz tek yolu - kök CMakeLists.txt oluşturmak ve kod aşağıdaki oraya koyun: Bunu yaptıktan sonra, test/CMakeLists.txt içinde target_link_libraries(test testlib) yapabilirsiniz

add_subdirectory(projects/test) 
add_subdirectory(lib/testlib) 

ve otomatik olacak testlib'de bir şeyi değiştirirseniz yeniden oluşturuldu.