2011-11-29 27 views
29

Tôi đang cố gắng để thiết lập một dự án thử nghiệm trông như dự án của riêng tôi chỉ để có được những thứ làm việc đầu tiên và nó trông như thế này:CMake có bao gồm và đường dẫn nguồn - cơ bản thiết lập

/MainProject/inc/main.h 
/MainProject/src/main.cpp 
/LibProject/inc/test.h 
/LibProject/src/test.cpp 

tôi đã tìm thấy một số hướng dẫn, nhưng tôi không thể tìm hiểu làm thế nào để thiết lập này khi tôi có inc và src thư mục? Các tệp CMakeLists.txt sẽ trông như thế nào? Tôi sẽ có một trong /, một trong mỗi thư mục dự án? Có vẻ như tôi không cần phải có một trong các thư mục inc và src?

Trả lời

59

Bạn cần CMakeLists.txt cho từng thư mục con nguồn. cấu trúc của bạn nên tìm một cái gì đó như thế này:

root 
|-MainProject 
| |-inc 
| | '-main.h 
| |-src 
| | |-main.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
|-LibProject 
| |-inc 
| | '-test.h 
| |-src 
| | |-test.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
'-CMakeLists.txt 

Nội dung root/CMakeLists.txt:

project(MyProject) 
subdirs(MainProject LibProject) 

Nội dung LibProject/CMakeLists.txtMainProject/CMakeLists.txt:

subdirs(src) 

Nội dung LibProject/src/CMakeLists.txt:

# Notice name prefix of this variable, set by CMake according 
# to value given with "project()" in the root CMakeLists.txt. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject test.cpp) 

Nội dung MainProject/src/CMakeLists.txt:

include_directories(${MyProject_SOURCE_DIR}/MainProject/inc) 
# I assume you want to use LibProject as a library in MainProject. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
link_directories(${MyProject_SOURCE_DIR}/LibProject/src) 
add_executable(MainProject main.cpp) 
target_link_libraries(MainProject LibProject) 

Sau đó cấu hình và xây dựng với:

$ cd root 
$ mkdir build 
$ cd build 
$ cmake .. 
$ make 
+8

Điểm không phải là để sao chép câu trả lời của bạn mà là để hoàn thành nó. Theo như tôi biết nó sẽ không hoạt động nếu thiếu hai 'CMakeLists.txt' và thiếu' link_directories() 'lệnh. Tôi có ý định nhận xét câu trả lời của bạn, nhưng danh tiếng của tôi quá thấp để làm điều đó. Vì vậy, tôi đã tìm ra một câu trả lời thứ hai sẽ là cách tự chứa nhất. Không có ý xúc phạm bạn. –

+0

Nó phải hoạt động mà không có link_directories vì ​​thư viện của nó được xây dựng bởi cùng một dự án. Đối với vấn đề đường dẫn bạn đúng, tôi sẽ sửa nó. – Beginner

+0

Aah cool ok .. thanks – bitgregor

18

Bạn có thể làm như sau.

  • CMakeLists.txt trong thư mục MainProject của bạn:

    project(MainProject) 
    
    add_subdirectory(LibProject/src) 
    add_subdirectory(MainProject/src) 
    
  • CMakeLists.txt trong LibProject/src thư mục của bạn:

    include_directories(${PROJECT_SRC_DIR}/LibProject/inc/) 
    add_library(LibProject test.cpp) 
    
  • CMakeLists.txt trong MainProject bạn/thư mục src :

    include_directories(${PROJECT_SRC_DIR}/MainProject/inc/) 
    add_executable(MainProject main.cpp) 
    target_link_libraries(MainProject LibProject) 
    
+3

Tôi có thể hỏi tại sao bạn có '$ {PROJECT_SRC_DIR}'? Tôi gặp lỗi CMake và phải sửa biến như sau: '$ {PROJECT_SOURCE_DIR}' để làm cho nó hoạt động – nakajuice

+1

theo tài liệu, nó phải là PROJECT_SOURCE_DIR. Bạn có thể tìm thấy chi tiết tại đây: https://cmake.org/Wiki/CMake_Useful_Variables – wasabi

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