如何在Eclipse中始终编译cpp文件?

4
我在我的cpp源文件中包含了一个Unix时间戳__DATE__,以指示程序的构建日期。默认情况下,它仅在更改时编译文件,但现在我希望它总是被编译。我尝试搜索项目设置,但似乎需要深入了解编译器。我正在使用带有g ++的Eclipse。

我尝试谷歌搜索答案,但发现很难找到合适的关键字。

另外,如果我针对头文件而不是源文件进行此更改,是否会有明显差异?

感谢您的回答。

2个回答

4

看起来这需要更深入地理解编译器。

不,必须由构建系统完成。

一个非常简单的方法是创建一个名为date.cpp的单个文件,其内容如下,没有其他内容:

#include <string>

std::string build_time() {
    return __DATE__ " " __TIME__;
}

你可以在其他源文件中像这样使用它。
cout << "Built on " << build_time() << endl;

构建系统会跟踪您的更改,并只重新编译那些已更改(需要重新编译)的源文件。由于您没有更改date.cpp文件,因此它不会重新编译它。但是,您可以通过右键单击项目文件夹,然后选择 属性 > C/C++ 构建 > 设置 > 构建步骤 > 后构建步骤 并在Linux上将以下行添加到命令字段中来强制执行它:
rm -f <path to the Debug / Release directory>/date.o

您需要将文件放置在<调试/发布目录的路径>中。

在Windows上使用del /q命令似乎与rm -f命令相同,请进行确认。

由于我们删除了生成的目标文件date.o,因此构建系统必须在编译应用程序时使用当前的构建日期和时间重新构建它。

可能有许多其他变体,但以上内容在我看来足够简单并且起到了作用。


谢谢提示。对于基于Eclipse的TASKING(可能也适用于Eclipse),在Windows 10上,以下操作有效:“rm -f ${ProjDirPath}\Debug\path_to_file\version.o”(不带引号),在属性> C / C ++构建>设置>构建步骤>预构建步骤>命令中执行。“del”无效,我猜测Eclipse内部使用类似Linux的命令。 - Matthias Luh
@MatthiasLuh 感谢您的反馈。我没有任何版本的Windows,所以我无法自行检查。我的原始答案也表明它是rm -fdel /q,因此我认为我不应该更改答案。另外,我认为Eclipse不使用任何命令:它将执行您输入的内容“原样”。换句话说,支持rm但不支持del的是运行Eclipse的环境。 - Ali

4
您可以创建一个“预构建”步骤,使用touch命令更新文件的时间戳来强制重新编译该文件。请注意保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接