【问题标题】:C++Builder Force a special file to be compiledC++Builder 强制编译一个特殊文件
【发布时间】:2020-01-14 08:22:38
【问题描述】:

在我们的源代码中,我们有一个数据模块,其中设置了某些标准值(例如包含编译日期的内部版本号)。这个模块应该总是被编译。我们如何在 C++ Builder 中强制执行此操作,而不总是编译所有模块或手动“触摸”模块以将其标记为已更改?

【问题讨论】:

    标签: c++ compilation c++builder


    【解决方案1】:

    一种方法是将文件名添加到项目选项 -> C++ 编译器 -> 高级 -> 传递给编译器的附加选项。你可以在那里写下文件名,例如System.cpp。但是,只有在项目中的某些 C++ 文件发生更改时才会重新编译该文件,而不是在您不做任何更改的情况下进行重新编译。

    缺点是手动更改文件时,会在命令行中添加两次,并出现警告:[bcc32c Warning] ignoring duplicated input file 'System.cpp' [-Wborland]。要摆脱这种情况,您可以从构建中排除该文件(右键单击该文件)。

    【讨论】:

    • 感谢您的回复。该模块现在总是重新编译。不太好的是它看起来是否 C++Builder 也将头文件标记为已更改。这会导致重新编译包含此内容的所有模块。您对我有什么预防方法吗?
    • @user7579346 对头文件和 cpp 文件使用不同的文件名。
    • 您好,我发现它不起作用。在第一个例子中,它看起来是否有效,但它没有。我很想把它作为所有配置的价值——所有的平台,但它没有添加它。
    【解决方案2】:

    您可以使用Build Events 对话框来指定预构建事件 命令:

    删除对应的对象(.obj)文件或touching源就够了​​。

    【讨论】:

    • 谢谢,但是如何在不更改文件的情况下触摸文件?触摸在dos下不存在。
    • @PaulHoefakker 在 C++Builder 命令行实用程序中有 touch.exe。我不确定实用程序文件夹是否在 RAD Studio 安装过程中添加到系统路径中。
    • 你好 Manlio,在我们的安装中它不存在。我们正在使用 C++Builder 10.2
    • 你好 Manlio,我找到了 exe。它只是不显示在 Pre-Build Makros 中。谢谢
    • 现在我把它放在了构建后事件中。意味着第一次它不起作用,但后来它起作用了。
    【解决方案3】:

    我找到了解决方案。使用 C++Builder 提供了一个小工具“Touch” 此工具可用于确保始终编译模块。必须在 Build events 下的项目选项中添加(我不确定该选项是这样调用的。只知道我翻译的德语描述 'Build Ereignisse')我要编译的文件始终称为 'DmFehlerF. cpp'在目录'edi'中。为了得到这个,我在 Post build events 中添加了命令 'Touch -c .\edi\DmFehlerF.cpp' Projectoptions

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多