2012-01-16 51 views
6

Tôi sử dụng CMake để tạo tệp dự án và giải pháp Visual Studio 2010. Trên thực tế tôi có thể đặt các cài đặt khác nhau, như mức cảnh báo, cờ xây dựng gia tăng ect. từ CMake. Nhưng tôi không thể đặt các thư viện và thư viện bổ sung, được liệt kê trong tab cấu hình Thư mục VC++. Thực ra tôi đã thiết lập các thư mục đó theo cách thủ công. Đây là ngu ngốc và nhàm chán ...Làm thế nào để thêm CMake bao gồm và thư viện vào Visual Studio Solution?

Tôi đã cố gắng đặt các biến CMake sau: CMAKE_INCLUDE_PATH, INCLUDE_DIRECTORY nhưng không có gì xảy ra. Nếu tôi mở dự án, thư mục bao gồm của giải pháp luôn trống (chỉ có các thiết lập MSVE tiêu chuẩn được đưa ra).

Tôi cũng mệt mỏi khi đặt các biến này sau khi tạo tập tin thực thi, nhưng điều này cũng không có hiệu lực.

Đây là những gì tôi làm trực tiếp trong phần đầu của cmake file:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
PROJECT(${MODULE_NAME}) 
IF (MSVC) 
    # Activate C++ exception handling 
    IF (NOT CMAKE_CXX_FLAGS MATCHES "/EHsc") 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") 
    ENDIF() 

    # Set Warning level always to 4 
    IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") 
    string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 
    ELSE() 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 
    ENDIF() 

    #read path of dependency modules 
    file(READ "msvc.deps" MSVC_PROPERTIES) 
    STRING(REGEX REPLACE ";" "\\\\;" MSVC_PROPERTIES "${MSVC_PROPERTIES}") 
    STRING(REGEX REPLACE "\n" ";" MSVC_PROPERTIES "${MSVC_PROPERTIES}") 

    FOREACH(e ${MSVC_PROPERTIES}) 
    SET(INCLUDE ${INCLUDE} ${e}) 
    MESSAGE(STATUS "[INFO]: Value ${e}") 
    ENDFOREACH(e) 
    INCLUDE_DIRECTORIES(${INCLUDE}) 
ENDIF() 

Trong .deps nộp tôi đã thêm vào con đường của module dependeny tôi, dòng tách ra:

c:\binrev\development\boost\1.47\includes 
c:\binrev\repository\modules\brCore\trunk\includes 

Cả hai đều được đọc thành công nhưng không thể được đặt làm bổ sung bao gồm thư mục trong giải pháp MSVC của tôi.

Trân trọng, Hellhound

Trả lời

7

CMake là pretty well documented, nếu tôi đã hiểu câu hỏi của bạn sau đó các lệnh Tôi nghĩ rằng bạn đang tìm kiếm là

Mặc dù một số cấu hình được thực hiện bằng cách đặt biến, hầu hết được thực hiện bằng lệnh để thêm thông tin nhất định vào các phần của tòa nhà và ít thường xuyên hơn bằng cách đặt thuộc tính trên mục tiêu.

+0

Tôi biết rằng CMake có tài liệu tốt nhưng các biến này không hoạt động. Tôi đặt bất kỳ biến nào trong số đó, nhưng khi tôi mở giải pháp MSVC thì không có gì được đặt. – Hellhound

+0

Tôi cũng đã cố gắng thiết lập các biến môi trường MSVC INCLUDE và PATH với SET (ENV $ {PATH} "c: \ test \ ... \") nhưng điều này cũng không có hiệu lực. Các thư mục của giải pháp MSVC trống. – Hellhound

+0

Chúng không được đặt ngay cả sau khi thêm 'include_directories (/ path/to/include)' vào tệp 'CMakeLists.txt' của bạn? Bạn có thêm 'include_directories' TRƯỚC KHI bạn khai báo mục tiêu của mình không? (Thứ tự quan trọng). Nếu vậy, bạn có thể đăng một số hoặc tất cả tệp 'CMakeLists.txt' của mình minh họa sự cố không?Lưu ý rằng biến 'CMAKE_INCLUDE_PATH' không liên quan đến đường dẫn include được trình biên dịch sử dụng và không có biến hoặc lệnh gọi là' INCLUDE_DIRECTORY'. –

2

Tôi tin rằng include_directories ("path") ở đâu đó trong CMakeLists.txt sẽ thêm path vào C++ bao gồm đường dẫn.

+1

Biến số đó được đặt, nhưng không có gì xảy ra. Trong giải pháp, thư mục bao gồm trống. Tôi cũng đã cố gắng đặt biến này sau khi tạo thế hệ vô giá, nhưng không có hiệu lực. – Hellhound

0

Bạn đã xác định biến 'INCLUDE' bằng câu lệnh 'SET (INCLUDE $ {INCLUDE} $ {e})', nhưng '$ {INCLUDE}' cho biết rằng biến thể đã được xác định trước đó. Có lẽ bạn nên chắc chắn về điều đó.

Tôi chỉ là người mới bắt đầu.Nếu sai, tôi cảm thấy có lỗi.

+0

Tôi nghĩ cách đề nghị thêm các thư mục bao gồm đang sử dụng lệnh [include_directories()] (http://www.cmake.org/cmake/help/v3.0/command/include_directories.html) –

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