我有一個非常類似的問題,但在這裏提出的解決方案是不是真的滿意。 像原始海報一樣,我想運行基於boost :: test的單元測試。
我有多個測試項目,其中一個針對我們產品的每個市長組件。 必須在每次測試之前運行安裝目標意味着重新編譯整個事情只是爲了運行屬於核心組件的測試。這就是我想要避免的。
如果我改變核心組件中的某些東西,我想編譯該核心組件和相關的測試。然後運行測試。當測試成功時,我纔想編譯並最終安裝其餘部分。
對於在調試器中運行測試,我發現了一些非常有用的CMake的腳本: https://github.com/rpavlik/cmake-modules
有了這個,我可以指定所需的dll的所有目錄和PATH環境變量設置爲
# 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
)
,其中$ {} PL_RUNTIME_DIRS_DEBUG其中包含從升壓的DLL和所有其他圖書館可以找到的目錄,新工藝。
現在我正在尋找我怎麼能實現與ADD_CUSTOM_COMMAND類似的()的東西
更新:
ADD_CUSTOM_COMMAND()可以有cmake的寫入到一個批處理文件中的多個命令。因此,您可以首先設置所有運行時目錄的路徑,然後執行測試可執行文件。爲了能夠方便地手動執行測試,我讓CMake的創建生成目錄中的附加批處理文件:,單元測試,儘快趕上錯誤,而無需編譯整個
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()
有了這個很多第一。
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:install –