从这个简单的 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.hpp和interface.hpp,我会收到错误interface.hpp。
我一定是对文件做错了什么meson.build,但我找不到什么。
您不需要列出头文件。只需添加这样的包含目录:
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)