Я пытаюсь сгенерировать файл версии, используя cmake, используя add_custom_command
.Я только хочу, чтобы файл версии создавался (пере), если другая цель (библиотека объектов) имела какие-либо изменения.
Вот мой текущий упрощенный файл CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
project (version-test)
# Object file compilation target.
add_library(version-test-objects OBJECT main.cpp)
# Version object file target.
add_custom_command(OUTPUT version.cpp
COMMAND date "+char const *getVersion\\\(\\\) { return \\\"%Y-%m-%d %H:%M:%S\\\"\; }"
> version.cpp
DEPENDS version-test-objects
)
add_library(version-test-version OBJECT
version.cpp
)
# Binary target.
add_executable(version-test
$<TARGET_OBJECTS:version-test-objects>
$<TARGET_OBJECTS:version-test-version>
)
И дляПолнота моего упрощенного main.cpp:
#include <iostream>
extern char const *getVersion();
int main() {
std::cout << getVersion() << std::endl;
}
version.cpp
генерируется нормально вместе с первой сборкой.Однако изменения в источнике (например, touch main.cpp
) перестраивают только version-test-objects
и связывают исполняемый файл, без регенерации version.cpp
.
Как я могу заставить cmake регенерировать version.cpp
тогда и только тогда, когда version-test-objects
были какие-либо изменения?