2011-02-05 6 views
24

Tôi đang cố gắng sử dụng CMake để thiết lập một số phụ thuộc đơn giản giữa một dự án C++ và các thư viện mà nó sử dụng.CMake cách tạo đúng sự phụ thuộc giữa các mục tiêu

Các thiết lập như sau

  • Dự án
    • phụ thuộc

dự án riêng của mình chứa file nguồn bao gồm tiêu đề từ phụ thuộc và khi thực thi được xây dựng nó cần phải được liên kết với thư viện tĩnh của Dependency.

Cho đến nay tôi có thể làm việc này nhưng tôi phải chỉ định thư mục bao gồm Phụ thuộc trong tệp CMakeLists cho Dự án theo cách thủ công. Tôi muốn điều này được lấy ra tự động và tôi đã khám phá tùy chọn sử dụng lệnh find_package() để làm như vậy với thành công hạn chế và làm cho mọi thứ trở nên phức tạp hơn nhiều.

Tất cả những gì tôi muốn làm là có Phụ thuộc được xây dựng trước Dự án và có liên kết Dự án với thư viện và có thư mục bao gồm, Có cách đơn giản để đạt được điều này không?

My file cmake hiện tại:

DỰ ÁN, CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (Project) 
include_directories ("${PROJECT_SOURCE_DIR}/Project") 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 
add_dependencies(Project Dependency) 

PHỤ THUỘC, CMakeLists.txt

project(Dependency) 
add_library(Dependency SomethingToCompile.cpp) 
target_link_libraries(Dependency) 
+0

Checkout: http://stackoverflow.com/questions/10004134/cmake-add-dependency-not-in-subdirectory –

Trả lời

1

Nó không phải là chính xác rõ ràng những gì bạn muốn làm, và tại sao Project và Depency phải được xây dựng riêng biệt.

My đầu tiên mặc dù trên ví dụ của bạn sẽ là

  1. Trong DỰ ÁN, CMakeLists.txt

    • Di add_dependencies (Dự án phụ thuộc) Không cần phải xác định sự phụ thuộc, target_link_libraries() đã làm điều đó.
  2. Trong PHỤ THUỘC, CMakeLists.txt

    • Remove dự án (phụ thuộc) Nó xây dựng một thư viện, vậy tại sao phải có dự án riêng?
    • target_link_libraries Remove (phụ thuộc) Bởi vì nó không làm gì
+6

để trả lời câu hỏi của bạn . Phụ thuộc có thể là một dự án cho một thư viện được chia sẻ được bao gồm dưới dạng một mô-đun con git. Thư viện được chia sẻ có nghĩa là làm việc mà không có dự án bên ngoài. – Arne

16

Kể từ CMake 2.8.11 bạn có thể sử dụng target_include_directories. Chỉ đơn giản là thêm vào dự án DEPENDENCY của bạn chức năng này và điền vào bao gồm các thư mục bạn muốn xem trong dự án chính. CMake sẽ chăm sóc phần còn lại.

DỰ ÁN, CMakeLists.txt:

cmake_minimum_required (VERSION 2.8.11) 
project (Project) 
include_directories (Project) 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 

PHỤ THUỘC, CMakeLists.txt

project (Dependency) 
add_library (Dependency SomethingToCompile.cpp) 
target_include_directories (Dependency PUBLIC include)