2009-02-12 30 views
12

Tôi đang sử dụng để quản lý các bản dựng đa nền tảng của mình và tôi đã làm mọi thứ ngoại trừ vấn đề này. Tôi đặt RUNTIME_OUTPUT_DIRECTORY thành thư mục bin/ nơi tôi lưu trữ các tệp dữ liệu. Trên Linux, điều này hoạt động tốt. Trên Windows, các tệp thi hành được đặt trong thư mục con Debug/Release tùy thuộc vào loại xây dựng. Có cách nào để có được để sao chép thực thi vào thư mục thích hợp, hoặc (thậm chí tốt hơn) ngừng sử dụng các thư mục con hoàn toàn?cmake RUNTIME_OUTPUT_DIRECTORY trên Windows

+0

tôi giả sử bạn đang sử dụng cmake để tạo Visual Studio file giải pháp/dự án, không biết có đúng? Phiên bản Visual Studio nào được sử dụng? Phiên bản nào của cmake? –

+0

Có, tôi đang sử dụng CMake để tạo các tệp giải pháp (cmake 2.6, VS 2005) – thekidder

Trả lời

9

Tôi đã sử dụng tính năng tiền tố thuộc tính tiền tố hack được báo cáo bởi Ogapo trong nhiều năm. Nó hoạt động.

Nhưng với phiên bản CMake 2.8, có hỗ trợ chính thức để tránh các thư mục con Release/Debug trên Windows.

Sử dụng một trong hai CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> biến toàn cục, hoặc mỗi mục tiêu <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> tài sản, như vậy:

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
+0

Tôi chưa xem xét giải pháp. Và đi qua câu trả lời này và đồng thời tôi tìm thấy liên kết này: https://cmake.org/Bug/view.php?id=9163. Câu trả lời này sử dụng chính xác cùng một kỹ thuật. Tôi nghĩ câu trả lời này là giải pháp tốt nhất cho đến nay. Hoạt động khá tốt cho tôi. Cảm ơn. –

-4

Bạn cần thay đổi vị trí xây dựng của các dự án studio trực quan của mình. Đi đến thuộc tính dự án và trên tab biên dịch xác định 'Xây dựng đường dẫn đầu ra' ở bất cứ nơi nào bạn muốn.

Note

Không biết như thế nào có liên quan này là vì tôi không biết về CMake.

Bạn có thể sử dụng mã thông báo sau trong Visual Studio xây dựng sự kiện:

$(TargetPath)

Đây sẽ là đường dẫn đến vị trí mà dự án của bạn được xây dựng để quá phụ thuộc vào các thiết lập dự án của bạn này sẽ hoặc là Thư mục gỡ lỗi hoặc phát hành.

1

Một số biến cmake đã tạo phiên bản cụ thể.

CMAKE_C_FLAGS 
    the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS(). 
CMAKE_C_FLAGS_DEBUG 
    compiler flags for compiling a debug build from C sources. 
CMAKE_C_FLAGS_RELEASE 
    compiler flags for compiling a release build from C sources. 
CMAKE_C_FLAGS_RELWITHDEBINFO 
    compiler flags for compiling a release build with debug flags from C sources. 

tôi đã không xác nhận những vars tồn tại, nhưng có lẽ thiết RUNTIME_OUTPUT_DIRECTORY_DEBUG & & RUNTIME_OUTPUT_DIRECTORY_RELEASE để điều tương tự có thể làm việc.

10

Tôi không chắc chắn nếu các thư mục này cố ý hoặc lỗi, nhưng ít nguy cơ không tương thích về phía trước bạn có thể thêm:

if (MSVC_IDE) 
    # hack to get around the "Debug" and "Release" directories cmake tries to add on Windows 
    set_target_properties (${NAME} PROPERTIES PREFIX "../") 
endif() 

này đã làm việc cho tôi

+2

Điều này cũng tốt cho tôi. Đối với các tệp .lib, hãy sử dụng SET_TARGET_PROPERTIES ($ {PROJECT_NAME} TÍNH CHẤT IMPORT_PREFIX "../") – Torleif

1

Cho đến nay, sản phẩm tốt nhất câu trả lời tôi đã tìm thấy là chỉ cần viết CMake install commands cho mỗi mục tiêu và tệp dữ liệu của tôi và thiết lập trình gỡ lỗi MSVC để chạy ra khỏi thư mục cài đặt. Điều này có thêm lợi ích khi sử dụng CPack để tạo trình cài đặt.

1

Đối với tôi một toàn cầu:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib") 
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib") 

đã làm việc, vì vậy tôi không cần phải cài đặt nó cho mỗi thư viện (CMake 2.8.4)