因存在缺失标头而导致介子构建错误

Pie*_*tro 0 c++ meson-build

从这个简单的 Meson 构建文件中,我在 *** 行收到一个关于缺少头文件的错误:

# meson.build - src/

subdir('config')
subdir('testers')
subdir('utilities')

headers += [
]

mainPrj += [
    'entrypoint.cpp'
    ]

autoTest += [
    'entrypoint_test.cpp'
]

Source = [ headers, mainPrj ]
SourceTest = [ headers, autoTest ]

MyProgExe = executable('MyProg', Source)     ***
MyProgTestExe = executable('MyProgTest', SourceTest)

test('Internal test', MyProgTestExe)
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

src/meson.build:***:0: 错误: 文件 dataStructures.hpp 不存在。

标头确实存在,它位于目录中src/config/,并且没有出现在src/meson.build文件中,而是出现在src/config/meson.build

# meson.build - src/config/

headers += [
    'dataStructures.hpp',
    'interface.hpp'
]
Run Code Online (Sandbox Code Playgroud)

如果我交换dataStructures.hppinterface.hpp,我会收到错误interface.hpp

我一定是对文件做错了什么meson.build,但我找不到什么。

Elv*_*ric 5

您不需要列出头文件。只需添加这样的包含目录:

inc_dir = include_directories('path/to/include')
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

inc_dir = include_directories('src/config')
MyProgExe = executable('MyProg', Source, include_directories: inc_dir, ...)
Run Code Online (Sandbox Code Playgroud)

我通常做的是声明项目依赖:

project_dep = declare_dependency(include_directories: inc_dir, sources: srcs,
dependencies[...])
Run Code Online (Sandbox Code Playgroud)

并将其用于每个目标(例如应用程序和测试可执行文件),如下所示:

src_main = ...
executable('app', sources:srcs_main, dependencies:[project_dep])
...
test_main = ...
executable('unit_tests', sources:[test_main, test_specific_srcs], dependencies:[project_dep])
Run Code Online (Sandbox Code Playgroud)