【问题标题】:Get File Data Preprocessor Macro获取文件数据预处理器宏
【发布时间】:2019-03-18 19:41:24
【问题描述】:

我在一个解决方案中有两个 C/C++ 可执行项目。另一个项目需要其中一个项目的输出;将第二个项目想象成某种安装程序(它不是,所以我不需要安装程序项目,但它会像读取第二个项目的输出一样读取)。

有什么方法可以将第一个项目输出的原始数据转换为编译时可用的数据吗?我的想法是这样的:

// build order is set so this second project is built after the first is completed

/*c++ constexpr*/ unsigned char ProjectOneOutput[ ] =
    SOME_PREPROCESSOR_MACRO_TO_READ_FILES( PROJECT_ONE_OUTPUT_PATH );

// code that uses ProjectOneOutput goes here

编辑:These answers 将不起作用。

  1. 外部链接不是我想要的,除非有办法直接在文件中进行。

  2. 这不是原始的 C/C++,它需要一个外部程序。

  3. 该文件是PE,因此不能包含在STR()中。

【问题讨论】:

  • 修改第一个程序输出头文件?
  • 什么意思?第一个文件是 PE。它不能只是做成一个“头文件”。另外,我没有看到将其作为头文件的目的。

标签: c++ c windows visual-studio visual-c++


【解决方案1】:

没有可以让您读取二进制文件的预处理器工具。但是没有什么能阻止你编写一个小程序甚至是 shell 脚本来读取二进制文件并输出 C 代码,该代码会将 char 数组初始化为文件的内容。

然后您的程序可以#include 生成的文件。因此,您需要做的就是将您的转换程序添加到构建过程中。

【讨论】:

  • 我不想有一个外部程序,这违背了项目依赖自身的整个目的。
  • @cryotography:它不是外部程序,它是构建系统的一部分(并包含在项目中)。您无需分发已编译的代码,就像分发您正在使用的 C++ 编译器一样。它甚至不是一个DLL。一旦编译完成,它的工作就完成了。
  • 所以你的意思是添加一个项目来读取并创建一个包含数据的 unsigned char 数组的文件?在依赖项目编译之前如何让这个项目运行?
  • @cryptographyman:可悲的是,我对如何使用 Visual Studio 配置构建配方一无所知。使用标准的类似 bsd 的 makefile,这很简单,这样的解决方案很常见。我确信它在 Visual Studio 中同样微不足道,因为带有代码生成器的复杂项目也在该环境中编译。
【解决方案2】:

资源是要走的路。如果有人愿意,我可以更新此答案以获得更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多