예 가능합니다. CMake는 대상과 파일 간의 종속성을 추가 할 수 있으며 이러한 파일은 원본 파일 일 필요가 없습니다.
코드 단계가 잘 보입니다 (빌드하지 않았 음)하지만 테스트 빌드가 누락되었다고 가정합니다.
add_custom_command
대신 add_custom_target
을 사용합니다. 화장 실행 중에
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_target을 만들 수 있습니다.
mylib.h
bool compare(int a, int b);
mylib.cpp
#include "mylib.h"
bool compare(int a, int b)
{
return a == b;
}
당신이 중 하나를 가지고 포스트 빌드로 추가 할 수
#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;
}
을 MyTest.cpp 단계에서 b로 (CTest 커스터마이징 참고) (https://cmake.org/Wiki/CMake/Testing_With_CTest#Customizing_CTest)를 참조하십시오.) CTest 커스터마이징 커맨드를 추가 할 수 있습니다. – Florian
@Florian하지만 빌드 후 단계가 필요 없습니다. 테스트의 전제 조건을 지정하고 싶습니다. 그렇지 않으면 나는 "make test"를 실행하고 필요한 모든 것이 이미 컴파일되었다고 가정 할 수 없다. 그리고 나는'CTEST_CUSTOM_PRE_TEST'가 명령이 * 항상 * 실행되고 필요할 때만 실행되기 때문에 어떻게 작동 하는지를 보지 못했습니다. – josch
중복에 대한 설명 : ** 테스트를 위해 ** 파일을 생성하고 싶습니다. 중복 된 질문은 ** 테스트 실행 파일 **에 대해 묻습니다. CMake의 관점에서 볼 때 두 가지 액션은 단지 CMake 타겟 일뿐입니다. – Tsyvarev