Tôi có một vấn đề rất tương tự, nhưng các giải pháp trình bày ở đây là không thực sự thỏa đáng. Giống như poster gốc, tôi muốn chạy thử nghiệm đơn vị dựa trên boost :: test.
Tôi có nhiều dự án thử nghiệm, một dự án cho từng thành phần thị trưởng của sản phẩm của chúng tôi. Có để chạy các mục tiêu cài đặt trước khi mỗi thử nghiệm có nghĩa là biên dịch lại toàn bộ điều chỉ để chạy các bài kiểm tra thuộc về một thành phần cốt lõi. Đó là những gì tôi muốn tránh.
Nếu tôi thay đổi thứ gì đó trong thành phần cốt lõi, tôi muốn biên dịch thành phần cốt lõi đó và các kiểm tra liên quan. Và sau đó chạy thử nghiệm. Khi các thử nghiệm thành công, chỉ sau đó tôi mới muốn biên dịch và cuối cùng cài đặt phần còn lại của nó.
Đối với chạy các bài kiểm tra trong trình gỡ lỗi, tôi tìm thấy một số kịch bản cmake rất hữu ích tại địa chỉ: https://github.com/rpavlik/cmake-modules
Với điều này, tôi có thể chỉ định tất cả các thư mục của file dll cần thiết, và các biến môi trường PATH được thiết lập cho quy trình mới:
# for debugging
INCLUDE(CreateLaunchers)
create_target_launcher(PLCoreTests
ARGS "--run-test=Core1"
RUNTIME_LIBRARY_DIRS ${PL_RUNTIME_DIRS_DEBUG} ${PROJECT_BINARY_DIR}/bin/Debug
WORKING_DIRECTORY ${PL_MAIN_DIR}/App/PL/bin
)
Trường hợp $ {PL_RUNTIME_DIRS_DEBUG} chứa các thư mục nơi dlls từ tăng và tất cả các thư viện khác có thể được tìm thấy.
Bây giờ tôi đang tìm kiếm làm thế nào tôi có thể đạt được một cái gì đó tương tự với ADD_CUSTOM_COMMAND()
Cập nhật:
ADD_CUSTOM_COMMAND() có thể có nhiều lệnh cmake viết vào một tập tin batch. Vì vậy, trước tiên bạn có thể thiết lập đường dẫn với tất cả các thư mục thời gian chạy, và sau đó thực hiện kiểm tra thực thi. Để có thể dễ dàng thực hiện các bài kiểm tra bằng tay, tôi để cho cmake tạo ra một tập tin thực thi bổ sung trong thư mục build:
MACRO(RunUnitTest TestTargetName)
IF(RUN_UNIT_TESTS)
SET(TEMP_RUNTIME_DIR ${PROJECT_BINARY_DIR}/bin/Debug)
FOREACH(TmpRuntimeDir ${PL_RUNTIME_DIRS_DEBUG})
SET(TEMP_RUNTIME_DIR ${TEMP_RUNTIME_DIR} ${TmpRuntimeDir})
ENDFOREACH(TmpRuntimeDir)
ADD_CUSTOM_COMMAND(TARGET ${TestTargetName} POST_BUILD
COMMAND echo "PATH=${TEMP_RUNTIME_DIR};%PATH%" > ${TestTargetName}_script.bat
COMMAND echo ${TestTargetName}.exe --result_code=no --report_level=no >> ${TestTargetName}_script.bat
COMMAND ${TestTargetName}_script.bat
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug
)
ENDIF(RUN_UNIT_TESTS)
ENDMACRO()
Với điều này, các bài kiểm tra đơn vị bắt lỗi càng sớm càng tốt, mà không cần phải biên dịch toàn bộ rất nhiều.
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:install –