【问题标题】:How to pass file name as a C++ compile argument to use in meson build?如何将文件名作为 C++ 编译参数传递以在介子构建中使用?
【发布时间】:2025-12-24 02:25:11
【问题描述】:

在编译源文件 src.cpp 时,我需要将编译器标志 -D__DEBUG_FILE__="src.cpp" 传递给 g++。我怎样才能在介子中实现这一点?我知道cpp_args 内置选项,但无法弄清楚如何在其中传递文件名。

我知道在 make 文件中您可以编写类似于以下内容来实现此目的:我正在寻找一种在介子构建中复制它的方法。

test.o : test.cpp     
g++ -D__MY_FILE__=\"$<\" -c $< -o $@

【问题讨论】:

  • 您阅读过mesonGCC 的文档 吗?
  • 是的,我知道在 make 文件中您可以编写类似于下面的代码来实现这一点:我正在寻找一种在介子构建中复制它的方法。 test.o : test.cpp g++ -D__MY_FILE__=\"$&lt;\" -c $&lt; -o $@
  • 不要评论你的问题,而是编辑它

标签: gcc built-in compiler-flags meson-build


【解决方案1】:

作为一种解决方法,我已经得出以下结论:

trimprefix = run_command(['python', '-c', 'import sys, os; print(os.path.relpath(sys.argv[1], sys.argv[2]))', meson.current_source_dir(), meson.build_root()]).stdout().strip()

cpp_args : [ '-fmacro-prefix-map=@0@/='.format(trimprefix) ]

还有两个问题:

  1. 我还需要使用__FILE__,我不能像__MY_FILE__那样定义自己的宏
  2. 我需要为每个子目录计算一次"trimprefix"

在 cpp_args 中使用 @INPUT@@BASENAME@ 的内置选项可以省去很多麻烦! 我在 meson-build #7485 中提出了一个问题来解决这个问题 - 如果你也需要这个,请投票。

【讨论】: