cmake - cmake add_custom_command 依赖于对象库
问题描述
我正在尝试使用 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
.
version.cpp
当且仅当version-test-objects
有任何更改时,如何让 cmake 重新生成?
解决方案
DEPENDS version-test-objects
仅指定目标级别的依赖关系,这意味着该命令可能会在构建目标后运行version-test-objects
。您声明了每当更新任何目标文件部分时都应运行该命令的要求version-test-objects
。所以这些也必须列出来DEPENDS
。这可能被认为是关于 OBJECT 库和普通库之间差异的错误。
# 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 $<TARGET_OBJECTS:version-test-objects>
)
这适用于我使用 CMake 3.13 Makefile 生成器。这在 CMake 3.8 或更早版本中可能不起作用,因为发行说明指出此表达式直到 3.9 才添加。如果是这种情况,您可能需要创建一个使用所有对象的虚拟存档,然后将其用作依赖项。
推荐阅读
- azure - 集群创建 HdInsight 和核心分配。调整 apache spark 提交
- c# - .Net Core 3.1 和 .Net 5.0 是否支持 XPath 2.0?
- json - 使用 RestAssured JsonPath 在列表的索引处获取 JSON 响应列
- ios - scene(openURLContexts) 或 scene(willConnectTo) 什么时候会有多个 urlContexts?
- php - PHP 致命错误:未捕获的错误:类 'WooGateWayCoreLib\admin\options\functions\Coin_List'
- python - Pandas read_csv 给出十进制列数
- r - 我的情节中x轴的顺序有问题
- reactjs - 来自 react-jss 的带有 createUseStyles 的 TypeScript 类型
- python - ValueError:使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。在 Python 中读取 csv 时
- javascript - 动态拆分数组元素