2010-09-28 38 views
10

Tôi đã googling một lúc và tôi không có kết quả nào được nêu ra vì vậy tôi quay sang các bạn ^^ Tôi đang cố gắng sử dụng CMake để xây dựng dự án C++ của mình và tôi gặp sự cố trong tiêu đề đường dẫn.Đường dẫn tiêu đề CMake và tuyệt đối

Vì tôi đang sử dụng rất nhiều lớp được sắp xếp trong một số thư mục, tất cả các câu lệnh include của tôi đều có đường dẫn tuyệt đối (vì vậy không cần sử dụng "../../") nhưng khi cố gắng tạo CMake Makefile nó chỉ không hoạt động.

Có ai biết cách chỉ định trong CMakeLists.txt rằng tất cả các bao gồm đều có đường dẫn tuyệt đối không? Cảm ơn rất nhiều trước.


đầu ra của tôi khi cố gắng để làm

~/multiboost/BanditsLS/GenericBanditAlgorithmLS.h:45:25: Utils/Utils.h: No such file or directory
~/multiboost/BanditsLS/GenericBanditAlgorithmLS.h:46:35: Utils/StreamTokenizer.h: No such file or directory

tập tin CMakeLists.txt của tôi:

#The following command allows the use of the "file" command 
cmake_minimum_required(VERSION 2.6) 

#The declaration of the project 
project(multiboost) 

#This allows recursive parsing of the source files 
file(
    GLOB_RECURSE 
    source_files 
    * 
    ) 
list(REMOVE_ITEM source_files ./build/*) 

#This indicates the target (the executable) 
add_executable(
    multiboost 
    ${source_files} #EXCLUDE_FROM_ALL build/ 
    ) 
+1

bạn có thể prvodie một ví dụ nhỏ (nguồn/header/cmake)? Ngoài ra, đường dẫn tuyệt đối thường là một ý tưởng tồi. Cách tốt nhất để làm điều này là imo cách làm ví dụ tăng nó: chỉ định một gốc duy nhất có trong đường dẫn bao gồm từ trình biên dịch và bắt đầu từ đó. – stijn

+0

Có chính xác, đây là những gì tôi đang làm: Nói rằng tôi có một src/dir có chứa tất cả các subdirs của nguồn cũng như các tập tin chính. Trong tất cả các câu lệnh include của tôi, tôi chỉ phải chỉ định đường dẫn từ src /. Trong dự án XCode của tôi, nó hoạt động tốt nhưng tôi đã không tìm ra cách để làm cho nó trong CMake. (Cảm ơn câu trả lời của bạn; o)) – Archy

+0

vâng nhưng chúng tôi vẫn cần một ví dụ + thông tin thêm ('nó chỉ không hoạt động' là khó hiểu như một mô tả lỗi có thể nhận được, không cho chúng tôi biết gì cả) – stijn

Trả lời

12

Bạn cần một cái gì đó như thế này trong CMakeLists.txt:

SET(BASEPATH "${CMAKE_SOURCE_DIR}") 
INCLUDE_DIRECTORIES("${BASEPATH}") 
+0

Tuyệt vời! Tôi nghĩ rằng đây là chính xác những gì đã mất tích (các var BASEPATH) Cảm ơn fschmitt! – Archy

5

thiết lập đúng đường dẫn bao gồm: giả sử thư mục Utils của bạn là trong/exp/appstat/benbou/multiboost, sau đó cmake (thực sự, gcc) phải biết điều này:

include_directories(/exp/appstat/benbou/multiboost) 

hoặc nó có thể là thuận tiện hơn để chuyển thông tin này như một tùy chọn định được thông qua trên dòng lệnh:

include_directories(${MyProjectRoot}) 

cmake -DMyProjectRoot=/exp/appstat/benbou/multiboost  
+1

Cảm ơn stjin. Btw, tệp cấu hình CMake phải là nền tảng độc lập, nó có thể được thực hiện với các câu lệnh IF đơn điệu. Chúc may mắn! – Archy

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