是的,它是可能的。 CMake可以添加目標和文件之間的依賴關係,這些文件不需要是源文件。
您的代碼步驟看起來不錯(我沒有構建它),但我認爲缺少的是構建測試。
而且我用add_custom_target
代替add_custom_command
。
的CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
add_library(mylib SHARED mylib.cpp)
# Create out.dat as an example
add_custom_target(testfile_outdat COMMAND touch out.dat)
add_executable(mytest mytest.cpp)
target_link_libraries(mytest mylib)
add_dependencies(mytest testfile_outdat)
add_test(NAME mytest COMMAND mytest)
該實施例在執行補充生成的代碼。該解決方案適用於數據未被測試修改的情況。
的測試數據生成取決於由目標mytest的的,但不是那種mytest的是用作測試
根據命令來創建測試數據文件,一些平臺具體的東西可以在申報成爲可能。因此,您可以根據要支持的平臺創建不同的custom_targets。
mylib.h
bool compare(int a, int b);
mylib.cpp
#include "mylib.h"
bool compare(int a, int b)
{
return a == b;
}
mytest.cpp
#include <stdio.h>
#include "mylib.h"
int main(int arcc, char* argv[])
{
bool actual = compare(1, 1);
bool expected = true;
printf("Testresult %s\n", (actual == expected) ? "OK" : "Failed");
return 0;
}
您可以採取以下將其添加爲生成後步驟b建立'bla'或者你可以在全局或'CTestCustom.cmake'中添加'CTEST_CUSTOM_PRE_TEST'命令(參見[Customizing CTest](https://cmake.org/Wiki/CMake/Testing_With_CTest#Customizing_CTest))。 – Florian
@弗洛裏安,但我不想要一個後構建步驟 - 我想指定測試的先決條件。否則,我不能只運行「make test」並假定所需的所有內容都已經被編譯(或將被編譯)。我不明白CTEST_CUSTOM_PRE_TEST是如何工作的,因爲該命令總是被執行,而不僅僅是在需要時執行。 – josch
重複說明:您想**爲測試生成一些文件**。重複的問題詢問**測試可執行文件**。從CMake的角度來看,這兩個行動都只是CMake的目標。 – Tsyvarev