Giải pháp add_custom_target(run ALL ...
sẽ làm việc đối với trường hợp đơn giản khi bạn chỉ có một mục tiêu mà bạn đang xây dựng, nhưng bị phá vỡ khi bạn có nhiều mục tiêu cấp cao nhất, vd ứng dụng và thử nghiệm.
Tôi gặp phải vấn đề tương tự khi tôi cố gắng đóng gói một số tệp dữ liệu thử nghiệm thành tệp đối tượng để kiểm tra đơn vị của tôi sẽ không phụ thuộc vào bất kỳ thứ gì bên ngoài. Tôi đã giải quyết nó bằng cách sử dụng add_custom_command
và một số phép thuật phụ thuộc bổ sung với set_property
.
add_custom_command(
OUTPUT testData.cpp
COMMAND reswrap
ARGS testData.src > testData.cpp
DEPENDS testData.src
)
set_property(SOURCE unit-tests.cpp APPEND PROPERTY OBJECT_DEPENDS testData.cpp)
add_executable(app main.cpp)
add_executable(tests unit-tests.cpp)
Vì vậy, bây giờ testData.cpp sẽ được tạo trước khi đơn vị-tests.cpp được biên soạn và bất kỳ thay đổi testData.src nào. Nếu lệnh bạn đang gọi thực sự chậm, bạn sẽ nhận được phần thưởng thêm khi bạn xây dựng chỉ mục tiêu ứng dụng, bạn sẽ không phải chờ đợi cho lệnh đó (chỉ các nhu cầu thực thi kiểm tra) mới kết thúc.
Nó không được hiển thị ở trên, nhưng việc áp dụng cẩn thận ${PROJECT_BINARY_DIR}, ${PROJECT_SOURCE_DIR} and include_directories()
sẽ giữ cho cây nguồn của bạn sạch các tệp được tạo.
Nguồn
2011-07-22 04:07:40
add_custom_target [can] (http://stackoverflow.com/a/15973676/704244) là một thay thế cho add_custom_command –