【问题标题】:Does Code::Blocks have a #define for its own version?Code::Blocks 是否有自己版本的#define?
【发布时间】:2021-08-22 13:09:57
【问题描述】:

我在 Code::Blocks 中为 wxWidgets 创建了一个新项目,并注意到在生成的“about”窗口中,“define”用于显示 wxWidgets 版本(wxVERSION_STRING)。

我想在 about 窗口中显示更多信息,包括 C::B 的版本

C::B 是否有定义来显示其版本?

【问题讨论】:

  • 您是否要修改 C::B?你和他们的开发人员谈过吗?请记住,这仅与 IDE 有关。
  • 不,我不是要修改 C::B,我只是想修改生成的新项目中的 about 框。当 wxWidgets 更新时,新版本会在您编译项目时自动设置为正确的版本。我也想为 C::B 提供一些东西。目前我只会在源文件中硬编码“20.03”。 GCC 的“9.3.0”也是硬编码的。
  • 好吧,看起来您肯定是在尝试修改 C::B。请咨询其开发人员。
  • 用户不需要。当用户报告错误时,这是​​我想知道的。我希望 C::B 有一个像 wxWidgets 一样定义的常量。 C::B IDE 在其关于屏幕中显示版本。我在 IDE 的源代码中搜索过这样的常量,但找不到。
  • @hennep,C::B 只是一个 IDE。当用户报告问题时,它肯定没有连接到它的版本。很可能它是您的程序中需要修复的一个大问题。请了解 IDE 是什么。

标签: codeblocks wxwidgets


【解决方案1】:

看起来 Code::Blocks IDE 没有提供您想要的字符串常量,但是手动将此常量定义为宏很容易,IDE 会自动将此宏添加到它编译的所有文件中。

顺便说一句,如果从命令行运行 codeblocks 可执行文件,它将输出其版本 - 但是,我在 Code::Blocks 二进制文件或配置文件中找不到这个字符串 - 可能它被混淆了。

hekto@ubuntu:~$ codeblocks
Starting Code::Blocks Release 20.03  rev 11997 2020-04-18, 19:47:24 - wx3.0.4 - gcc 9.3.0 (Linux, unicode) - 64 bit

要定义一个宏CB_VERSION,其值等于此字符串,您可以打开Global compiler settings 窗口,选择#defines 窗格并手动输入此宏:

请注意宏值开头的 "\\\" 字符串和结尾的 \\\"" 字符串 - 没有它们,C++ 预处理器将无法将此宏的值传递到 C++ 源代码中。因此,下面的程序在内部 IDE 中编译和链接,将输出CB_VERSION 宏的值。

#include <iostream>

int main()
{
  const char* ver = CB_VERSION;
  std::cout << ver << std::endl;
}

更新。获取有关当前 Code::Blocks IDE 信息的另一种方法是查看 XML 文件 ~/.config/codeblocks/default.conf。该文件包含一个注释,描述了产品的构建方式和时间:

<!-- application info:
 svn_revision:  11997
 build_date:    2020-04-18, 19:47:24
 compiler_version:  gcc 9.3.0
 Linux Unicode
-->

此文件中的XML节点VERSION也存储了正式的产品版本和发布号:

<VERSION>
    <str>
        <![CDATA[20.03-r11997]]>
    </str>
</VERSION>

但是,为了提取这些信息,您需要编写一些脚本并在编译之前调用它——这并不容易。因此,使用版本信息定义宏看起来仍然更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多