2012-04-04 41 views
12

Hãy nói rằng có ấy sau cấu trúc thư mục:cmake: thêm sự phụ thuộc không trong thư mục con

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

thử nghiệm chứa CMakeFiles.txt và testlib cũng chứa CMakeFiles.txt. "test" tạo ra file thực thi và "testlib" tạo ra thư viện tĩnh.

Tôi muốn "thử nghiệm" liên kết với "testlib" mà không sử dụng các liên kết tượng trưng và không di chuyển thư viện "testlib" vào thư mục con trong "kiểm tra".

Bởi vì "testlib" không phải là một thư mục con của "test", tôi không thể làm

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

Trong CMakeFiles.txt thử nghiệm của - cmake sẽ phàn nàn về "testlib" không nằm trong "test" thư mục con . Ngoài ra, bởi vì hệ thống có nhiều trình biên dịch khác nhau, tôi không thể chỉ đơn giản cài đặt thư viện "testlib" vào một thư mục trung tâm nào đó, vì vậy tôi muốn thử nghiệm biên dịch bản sao của testlib và liên kết với nó (ví dụ như testlib một thư mục con). Tôi cũng muốn "thử nghiệm" dự án để tự động xây dựng lại "testlib" nếu nó đã được thay đổi.

Vì vậy, làm cách nào tôi có thể giải quyết vấn đề này? cmake 2.8.4, winxp sp3.

Trả lời

14

Bạn có thể cung cấp CMakeLists.txt cấp cao nhất trong root hoặc cung cấp thư mục nhị phân cho lệnh add_subdirectory; ví dụ.

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

Điều này tạo ra một thư mục con gọi là testlib_build trong thư mục build hiện tại của bạn có chứa các tập tin dự án tạo ra cho testlib, nhưng không phải là nguồn.

Đối biết thêm thông tin, hãy chạy

cmake --help-command ADD_SUBDIRECTORY 
+0

Cảm ơn - đó là chính xác những gì tôi cần. – SigTerm

+0

@Fraser - Có thể chỉ định thư mục nhị phân trong CMakeFile của testlib_build không? – tower120

+0

@ tower120 - Không, bạn cần phải chỉ định nó trong cuộc gọi 'add_subdirectory'. – Fraser

10

Cách duy nhất tôi thấy để làm điều này - tạo CMakeLists.txt trong rễ và đặt ở đó sau mã:

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

Khi bạn làm điều này, bạn có thể làm target_link_libraries(test testlib) trong thử nghiệm/CMakeLists.txt và nó sẽ được tự động xây dựng lại nếu bạn thay đổi một cái gì đó trong testlib.

Các vấn đề liên quan