“程序‘xxx’被编译后的可执行文件‘xxx’覆盖,因此在配置过程中无法使用”错误

问题描述 投票:0回答:1

使用 Meson 构建系统,我尝试运行从

flatc
获得的
find_program('flatc')
程序。但 Meson 抱怨“错误:程序‘flatc’被编译后的可执行文件‘flatc’覆盖,因此在配置过程中无法使用”。

介子.build

dependency('flatbuffers')
flatc = find_program('flatc')
run_command(flatc, '--version', check: true) # error

flatbuffers.wrap(从 WrabDB 复制)

[wrap-file]
directory = flatbuffers-24.3.6
source_url = https://github.com/google/flatbuffers/archive/v24.3.6.tar.gz
source_filename = flatbuffers-24.3.6.tar.gz
source_hash = 5d8bfbf5b1b4c47f516e7673677f0e8db0efd32f262f7a14c3fd5ff67e2bd8fc
patch_filename = flatbuffers_24.3.6-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/flatbuffers_24.3.6-1/get_patch
patch_hash = bc0e1035a67ae74b1f862491fe2b0fd49b2889d989508143fff0a45508421bd7
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/flatbuffers_24.3.6-1/flatbuffers-24.3.6.tar.gz
wrapdb_version = 24.3.6-1

[provide]
flatbuffers = flatbuffers_dep
program_names = flatc, flathash
  • 介子v1.3.2

  • 软呢帽 39

有关 run_command 的 Meson 文档解释说“第一个参数可以是您之前使用 find_program 检测到的字符串或可执行文件。”,这让我相信我正在以正确的方式使用该命令。

如何执行

flatc
程序以便在配置阶段编译 Flatbuffers 模式?

meson-build flatbuffers
1个回答
0
投票

单独的 Meson 文档指出 find_program() 只会在项目内的两个不同位置搜索位置。

一旦到达顶部 -

“这里的program_name是一个字符串,可以是要在PATH或项目内的其他位置中搜索的可执行文件或脚本。”

一旦进入列表,选项 5 中有 7 个选项。

“5.项目相对于当前子目录的源代码树

  • 如果使用configure_file()的返回值,则使用构建树中的当前子目录。”
我读过的文档似乎严重暗示它只能与当前与执行此函数的项目位于同一包中的其他项目一起使用,或者与您正在执行该函数的类的子类的程序一起使用。

//本段主要是对该错误可能性的推测,如果您确定您按照文档指定的方式将其用于该程序的子类,如果您愿意,可以完全忽略它。

如果您使用此命令来查找构建树中的程序并且是您运行该程序的类的子类,那么我无法提供有关其发生原因的具体答案,但我确实怀疑主要是它与方法覆盖/重载有关,其次它可能与 super() 实现有关,而似乎最不可能的是字段或类被公开而不是私有。不过,为了以防万一,仔细检查这些事情可能会有所帮助。

//猜测到此为止。

但是,如果您使用此命令的方式是您正在搜索的程序不在构建树中或该程序的子类中,那么这将是问题所在。如果这不是问题,那么我无法提供具体的答案,但请阅读推测段落,了解您可能需要仔细检查的

潜在问题列表。

© www.soinside.com 2019 - 2024. All rights reserved.