2011-10-21 43 views
19

Tôi muốn biên dịch cùng một tệp nguồn .cpp thành hai tệp thi hành đích khác nhau và tôi đang sử dụng cmake. Một sẽ có một số mã thiết bị đo đạc và cái kia thì không. Bằng cách đó tôi có thể so sánh chi phí của thiết bị đo đạc.Biên dịch cùng một tệp với các cờ khác nhau bằng cách sử dụng CMAKE

Tôi có mã thiết bị được phân tách bằng #ifdef để tôi muốn xác định giá trị bằng cờ -D. Tôi thấy điều đó là có thể với

add_definitions(-DINSTRUMENT) 

Nhưng có vẻ như điều này áp dụng cho tất cả các tệp thi hành được tạo trong thư mục đó. Tôi tự hỏi nếu có một cách tốt để thiết lập định nghĩa chỉ cho một mục tiêu thực thi cụ thể.

Trả lời

21

Bạn có thể đặt COMPILE_DEFINITIONS sở hữu của một trong những mục tiêu có định nghĩa mục tiêu cụ thể:

set_target_properties (instrumented_target PROPERTIES COMPILE_DEFINITIONS "INSTRUMENT") 

Cập nhật:

Bắt đầu từ CMake 2.8.11 bạn cũng có thể sử dụng target_compile_definitions cho cùng một mục đích.

+0

cảm ơn hoạt động. –

+5

Thuộc tính đó cũng có sẵn trên cơ sở tệp nguồn, sử dụng "set_property (SOURCE source_file_name PROPERTY COMPILE_DEFINITIONS ...)" – DLRdave

+1

@DLRdave, tôi nghĩ cần lưu ý rằng việc sử dụng 'set_target_properties()' sẽ không ghi đè các định nghĩa đã được thêm vào bởi 'add_definitions()' được định nghĩa trước đó. (Tôi đã lo lắng về điều này cho đến khi tôi chạy 'make VERBOSE = 1') – mpontillo

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