【问题标题】:Write to a file at compile time in C++?在 C++ 编译时写入文件?
【发布时间】:2020-03-30 14:37:59
【问题描述】:

我正在做一些 C++ 元编程,我有以下代码:

main.cpp

#include <fstream>

int main() {
    // not allowed
    constexpr {
        ofstream foo("foo.asm");
        foo << "incq   %rax\n";
        foo.close();
    }

    __asm(
        #include "foo.asm"
    );
}

foo.asm

        movw   $255, %ax
        movw   $1137, %bx
        addb   %bl, %al\n
        adcb   %bh, %ah

是否可以在编译时写入该文件?

【问题讨论】:

  • C 还是 C++?你在 Q 中说 C,但你有一个 cpp 文件,它通常用于 C++。
  • @NathanOliver 我最初是在 C 中做的,但我不介意只适用于 C++ 的答案,但好点,我改变了它
  • @Sapphire_Brick 谢谢。为此,您将需要使用构建系统。
  • 你到底想在这里实现什么?为什么要生成内联汇编块而不是使用预处理器或模板(在 C++ 中进行一些元编程的典型方法)?
  • @user7860670 我想编译另一个文件,获取输出,然后在编译时将其插入main

标签: c++ file compile-time


【解决方案1】:

没有。

但是,大多数构建系统都允许您在编译文件之前执行您想要的任何代码,这并不是真正的元编程,但它可能会解决您的问题。

【讨论】:

  • 我该怎么做?
  • Visual Studio 示例 - 右键单击​​项目 -> 属性 -> 构建事件 -> 预构建事件 -> 命令行。
  • 你的意思是在我编译之前?
  • 在您构建 (F7) 之前,Visual Studio 中的预构建事件会触发。您也可以编译单个文件 (Ctrl-F7),但这不会触发 Pre-Build 事件。
  • @Sapphire_Brick:这是一个相当复杂的幕后构建环境。当然,repl.it 的想法是让简单的事情变得简单。但代价往往是使艰难的事情变得不可能。而你想要的真的很难。
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多