如何将文件名作为 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__=\"$<\" -c $< -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++ 编译参数传递以在介子构建中使用?的主要内容,如果未能解决你的问题,请参考以下文章