gpt4 book ai didi

c++ - 如何节省 C++ DLL 的构建时间

转载 作者:行者123 更新时间:2023-12-03 07:22:34 25 4
gpt4 key购买 nike

我的项目是一个 C++ DLL(cmake 项目),它将方法从一个 c 接口(interface)暴露给另一个 C# 项目,
我想在 c 接口(interface)中添加一个方法 getBuildTime() 来返回构建时间(确切的日期和时间),以便从 C# 项目中我们可以知道何时构建 DLL。
有没有办法做这件事?
我不知道这是否有用,但我使用 git 作为版本控制系统

最佳答案

C/C++ 代码中的构建时间可以通过内置宏获得 __DATE____TIME__ ,例如做一些像 string build_time = __DATE__ " " __TIME__; .
包含这些宏用法的文件也必须是 touch在每次构建之前编辑以更改文件的修改时间。 touch是一个 unix 命令,也可以通过 Cygwin 在 Windows 中使用或其他方式。这是强制它重新编译以使用新日期所必需的。通过添加 touch build_time.cpp 进行文件触摸命令预构建事件,它们应该位于您的项目配置中的某个地方。或者,您可以添加 touch ing到你的make文件。或者,一些编译环境和可能的 MSVC 也可以配置始终重建哪些文件,这在项目的设置中进行了调整。
此外,如果您使用 git版本控制系统,那么您可能希望一起使用最后一个 git commit 哈希和时间,或者代替上面的构建时间。 Git 提交哈希和时间有时比使用上面建议的构建时间更好,因为 git 哈希和时间在下次提交之前的每次重新编译时保持相同,这确保您的 DLL 构建时间仅在代码更改/提交时更改,这可能帮助进行可重现的 DLL 编译。为了支持 git hash 和 time 做接下来的事情:
如果你有 unix echobashgit系统中的命令,例如通过安装 Cygwin或用于 Linux 的新的原生 Windows 子系统,那么您可以在命令脚本 before_build.cmd 中执行下一步操作你在构建之前运行,这个 shell 脚本也可以在 Unix 系统上运行,几乎不需要修改:

linux_echo -n "" > cfg.h

linux_echo -n "#define GIT_COMMIT """ >> cfg.h
linux_bash -c "echo -n $(git rev-parse --short=8 HEAD)" >> cfg.h
linux_echo """" >> cfg.h

linux_echo -n "#define GIT_COMMIT_TIME """ >> cfg.h
linux_bash -c "echo -n $(git show -s --format=%%ci $(git rev-parse --short=8 HEAD) | tr -d '\n')" >> cfg.h
linux_echo """" >> cfg.h

linux_echo -n "#define COMPILE_TIME """ >> cfg.h
linux_bash -c 'echo -n $(date +"%%Y-%%m-%%d %%H:%%M:%%S %%z")' >> cfg.h
linux_echo """" >> cfg.h
你会得到 cfg.h像:
#define GIT_COMMIT "fe0a7891"
#define GIT_COMMIT_TIME "2020-05-13 17:42:55 +0100"
#define COMPILE_TIME "2020-05-13 18:20:28 +0100"
您可以在代码中使用这些配置文件和宏。

关于c++ - 如何节省 C++ DLL 的构建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64667503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com