I am trying to build chatserver executable, which depends on libnetwork. libnetwork depends on the header library, libthread.
When I build chatserver with ninja -C buildDir command, there is no inclusion for libthread, which in turn results compile failure for libnetwork.
❯ ninja -C buildDir
ninja: Entering directory `buildDir'
[1/2] Compiling C++ object chatserver.p/src_App.cpp.o
FAILED: chatserver.p/src_App.cpp.o
c++ -Ichatserver.p -I. -I.. -I../subprojects/libnetwork/include -I/usr/include -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++20 -O0 -g -DBOOST_ALL_NO_LIB -DPROJECT_NAME=chatserver -DPROJECT_VERSION=0.0.1 -MD -MQ chatserver.p/src_App.cpp.o -MF chatserver.p/src_App.cpp.o.d -o chatserver.p/src_App.cpp.o -c ../src/App.cpp
...
../subprojects/libnetwork/include/mynamespace/network/Session.hpp:9:10: fatal error: mynamespace/thread/Queue.hpp: No such file or directory
9 | #include <mynamespace/thread/Queue.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed
libthread/meson.build
project(
'libthread',
'cpp',
version : '0.0.1',
default_options : ['cpp_std=c++20', 'warning_level=3']
)
project_headers = [
'include/mynamespace/thread/Queue.hpp',
]
build_args = [
]
### Target ###
inc = include_directories('include')
project_target = shared_library(
meson.project_name(),
[],
install : true,
cpp_args : build_args,
gnu_symbol_visibility : 'hidden',
include_directories : inc,
dependencies : [],
)
### Project ###
project_dep = declare_dependency(
include_directories : inc,
)
set_variable(meson.project_name() + '_dep', project_dep)
libnetwork/meson.build
project(
'libnetwork',
'cpp',
version : '0.0.1',
default_options : ['cpp_std=c++20', 'warning_level=3']
)
project_headers =
'include/mynamespace/network/Session.hpp',
]
project_sources = [
'src/Session.cpp',
]
build_args = [
]
### Target ###
project_dependencies = [
dependency('boost'),
dependency('libthread', fallback: ['libthread', 'libthread_dep']),
]
inc = include_directories('include')
build_args += [
'-DPROJECT_NAME=' + meson.project_name(),
'-DPROJECT_VERSION=' + meson.project_version(),
]
project_target = library(
meson.project_name(),
project_sources,
install : true,
cpp_args : build_args,
gnu_symbol_visibility : 'hidden',
include_directories : inc,
dependencies : project_dependencies,
)
### Project ###
project_dep = declare_dependency(
include_directories : inc,
link_with : project_target,
)
set_variable(meson.project_name() + '_dep', project_dep)
libnetwork/subprojects/libthread.wrap
[wrap-git]
url = <My url to libthread git>.git
revision = main
depth = 1
chatserver/meson.build
project(
'chatserver',
'cpp',
version : '0.0.1',
default_options : ['cpp_std=c++20', 'warning_level=3']
)
project_sources = [
'src/App.cpp',
]
project_dependencies = [
dependency('boost'),
dependency('libnetwork', fallback : ['libnetwork', 'libnetwork_dep']),
]
build_args = [
]
# Target
build_args += [
'-DPROJECT_NAME=' + meson.project_name(),
'-DPROJECT_VERSION=' + meson.project_version(),
]
project_target = executable(
meson.project_name(),
project_sources,
dependencies : project_dependencies,
install : true,
cpp_args : build_args,
)
chatserver/subprojects/libnetwork.wrap
[wrap-git]
url = <My url to libthread git>.git
revision = main
depth = 1
How can I set libthread as a public dependency for libnetwork so that chatserver can also include libthread?
It was a simple mistake.
To set the dependency as public, as like PUBLIC link in CMake, they should be passed to
dependenciesofdeclare_dependecy.Here is my modified code of libnetwork/meson.build