相关疑难解决方法(0)

什么是外部联系和内部联系?

我想了解外部联系和内部联系及其区别.

我也想知道的意思

const默认情况下,变量内部链接,除非另有声明extern.

c++ c++-faq

318
推荐指数
8
解决办法
12万
查看次数

强制CMake在每次构建时生成configure_file目标

我的CMakeLists.txt文件中有以下命令

configure_file([...]/Version.h.in [...]/Version.h @ONLY)
Run Code Online (Sandbox Code Playgroud)

如何在每次构建时运行它,但不仅仅是在Version.h.in更改时?我需要它,因为它中Version.h__DATE__宏,实际上应该被视为每个构建的新内容,即使它保持不变.

Version.h.in模样

static const char VERSION[] = "Bla-bla-bla " @FOOBAR@ " built on " __DATE__;
Run Code Online (Sandbox Code Playgroud)

c++ cmake

6
推荐指数
1
解决办法
4860
查看次数

如何在命令输出发生变化时触发CMake重新配置

我希望在命令输出发生变化时触发CMake配置; 具体来说,我正在尝试在输出git describe --always --dirty从上一次CMake配置发生变化时尝试进行CMake 配置.

大多数问题都可以通过观察HEAD文件并解析内部的symref refs/heads/[branch]并将它们链接起来来解决,configure_file(...)但是当树处于脏状态时(IE存在未提交的修改时,IE不会).在这种情况下,git describe --always --dirty会将-dirty后缀附加到输出.

当发生这种情况时,git文件没有变化,只有git注意到存储状态的差异所以我不能configure_file(...)在这里找到任何文件让cmake注意到更改并重新配置.

所以我想找到是否有办法让cmake运行git命令注意输出的差异并触发重新配置,几乎需要类似于预重新配置检查阶段的东西.

不确定这是否可能,如果有人有任何想法如何可以实现这种行为?

git cmake

5
推荐指数
1
解决办法
3793
查看次数

如何在没有不必要的重新编译的情况下使用C++代码提供Git提交哈希?

一个相当常见的要求,是:我想myapp --version显示版本和Git提交哈希(包括存储库是否脏).该应用程序是通过一个Makefile(实际生成的qmake,但现在让它保持"简单")构建的.我非常精通Makefiles,但这个让我很难过.

我可以像这样轻松获得所需的输出:

$ git describe --always --dirty --match 'NOT A TAG'
e0e8556-dirty
Run Code Online (Sandbox Code Playgroud)

C++代码期望提交哈希值可用作预处理器宏GIT_COMMIT,例如:

#define GIT_COMMIT "e0e8556-dirty" // in an include file
-DGIT_COMMIT=e0e8556-dirty         // on the g++ command line
Run Code Online (Sandbox Code Playgroud)

下面是我尝试将git describe输出检测到C++ 的几种不同方法.他们都没有完美的工作.

方法第一:$(shell)功能.

我们使用make的$(shell)函数来运行shell命令并将结果粘贴到make变量中:

GIT_COMMIT := $(shell git describe --always --dirty --match 'NOT A TAG')

main.o: main.cpp
    g++ -c -DGIT_COMMIT=$(GIT_COMMIT) -o$@ $<
Run Code Online (Sandbox Code Playgroud)

这适用于干净的构建,但有一个问题:如果我更改Git哈希(例如通过提交或修改干净的工作副本中的某些文件),make不会看到这些更改,并且二进制文件不会重建.

方法第二:产生 version.h

在这里,我们使用make recipe来生成version.h包含必要的预处理器定义的文件.目标是虚假的,因此它总是被重建(否则,它将始终被视为在第一次构建之后的最新版本).

.PHONY: version.h
version.h:
    echo "#define …
Run Code Online (Sandbox Code Playgroud)

c++ git makefile g++

5
推荐指数
2
解决办法
757
查看次数

标签 统计

c++ ×3

cmake ×2

git ×2

c++-faq ×1

g++ ×1

makefile ×1