如何将文件名作为 C++ 编译参数传递以在介子构建中使用?

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

还有两个问题:

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

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

【讨论】:

以上是关于如何将文件名作为 C++ 编译参数传递以在介子构建中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将存储的值作为列号参数传递以在 awk 中进行编辑?

介子构建系统 - 将编译器更改为 g++

如何将函数作为参数从 C 传递到 C++ 并返回到 C

如何使用 swig 将 python 类实例作为 c++ 函数的参数传递?

如何使用 QT 和 C++ 将字符串参数传递给函数

介子构建:手动添加可执行文件的依赖路径