在另一个头文件中包含外部库的头文件
Include header file of external library in another header file
目前我有以下项目结构,其中 libs
目录用于存储我从 github 下载的外部 C 库,因为它们在我的 OS 上不可用'存储库:
├── cli
│ └── cli.c
├── libs
│ ├── meson.build
│ └── pqueue
│ ├── pqueue.c
│ └── pqueue.h
├── modules
│ ├── algorithms
│ │ ├── a_star.c
│ │ └── a_star.h
│ ├── meson.build
├── meson.build
其中 libs/meson.build
是:
libpqueue_sources = [
'pqueue/pqueue.c',
]
pqueue_lib = shared_library('pqueue', libpqueue_sources)
pqueue_dep = declare_dependency(link_with: pqueue_lib)
modules/meson.build
是:
algs_sources = [
'algorithms/a_star.c',
]
algs_lib = static_library('algorithms',
sources: algs_sources,
include_directories: libs_include_dirs,
dependencies: pqueue_dep)
和meson.build
是:
project('graph-search', 'c')
graph_search_include_dirs = include_directories('modules')
libs_include_dirs = include_directories('libs')
subdir('libs')
subdir('modules')
cli_sources = [
'cli/cli.c'
]
executable('cli',
sources: cli_sources,
include_directories : graph_search_include_dirs,
link_with: [algs_lib])
当我尝试在 a_star.h
中创建一个 #include "pqueue/pqueue.h"
时,我的问题出现了,它说 /modules/algorithms/a_star.h:5:10: fatal error: pqueue/pqueue.h: No such file or directory
,但是当我将包含移动到 a_star.c
时,错误消失了。遗憾的是,我需要将它包含在头文件中,因为我需要导出一个使用 pqueue.h
类型的结构
有没有办法在不使用像 ../../libs/pqueue/pqueue.h
这样的路径的情况下将 pqueue.h 包含在 a_star.h 中?
因为您没有为 cli.c
指定 libs_include_dirs
来构建,编译器不知道如何搜索 pqueue/pqueue.h
.
更改您的 meson.build
以包含 libs_include_dirs
。
diff --git a/meson.build b/meson.build
index 4087a00..3347466 100644
--- a/meson.build
+++ b/meson.build
@@ -8,5 +8,5 @@ cli_sources = [
]
executable('cli',
sources: cli_sources,
- include_directories : graph_search_include_dirs,
+ include_directories : [graph_search_include_dirs, libs_include_dirs],
link_with: [algs_lib])
目前我有以下项目结构,其中 libs
目录用于存储我从 github 下载的外部 C 库,因为它们在我的 OS 上不可用'存储库:
├── cli
│ └── cli.c
├── libs
│ ├── meson.build
│ └── pqueue
│ ├── pqueue.c
│ └── pqueue.h
├── modules
│ ├── algorithms
│ │ ├── a_star.c
│ │ └── a_star.h
│ ├── meson.build
├── meson.build
其中 libs/meson.build
是:
libpqueue_sources = [
'pqueue/pqueue.c',
]
pqueue_lib = shared_library('pqueue', libpqueue_sources)
pqueue_dep = declare_dependency(link_with: pqueue_lib)
modules/meson.build
是:
algs_sources = [
'algorithms/a_star.c',
]
algs_lib = static_library('algorithms',
sources: algs_sources,
include_directories: libs_include_dirs,
dependencies: pqueue_dep)
和meson.build
是:
project('graph-search', 'c')
graph_search_include_dirs = include_directories('modules')
libs_include_dirs = include_directories('libs')
subdir('libs')
subdir('modules')
cli_sources = [
'cli/cli.c'
]
executable('cli',
sources: cli_sources,
include_directories : graph_search_include_dirs,
link_with: [algs_lib])
当我尝试在 a_star.h
中创建一个 #include "pqueue/pqueue.h"
时,我的问题出现了,它说 /modules/algorithms/a_star.h:5:10: fatal error: pqueue/pqueue.h: No such file or directory
,但是当我将包含移动到 a_star.c
时,错误消失了。遗憾的是,我需要将它包含在头文件中,因为我需要导出一个使用 pqueue.h
有没有办法在不使用像 ../../libs/pqueue/pqueue.h
这样的路径的情况下将 pqueue.h 包含在 a_star.h 中?
因为您没有为 cli.c
指定 libs_include_dirs
来构建,编译器不知道如何搜索 pqueue/pqueue.h
.
更改您的 meson.build
以包含 libs_include_dirs
。
diff --git a/meson.build b/meson.build
index 4087a00..3347466 100644
--- a/meson.build
+++ b/meson.build
@@ -8,5 +8,5 @@ cli_sources = [
]
executable('cli',
sources: cli_sources,
- include_directories : graph_search_include_dirs,
+ include_directories : [graph_search_include_dirs, libs_include_dirs],
link_with: [algs_lib])