При сборке исполняемого файла VFS можно включить в него именно ту функциональность, которая требуется, например:
Например, при разделении информационных потоков, связанных с файловыми системами и сетевым стеком, понадобится сборка "файловой версии" и "сетевой версии" VFS. В некоторых случаях в VFS требуется включить и сетевой стек, и файловые системы.
Сборка "файловой версии" программы VFS
В этом примере программа VFS содержит только реализацию файловой системы lwext4 (см. рис. ниже). Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_fs и lwext4:
CMakeLists.txt
project (vfsfs)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO")
add_executable (VfsFs "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsFs
${vfs_SERVER_LIB}
${LWEXT4_LIB}
${vfs_FS_LIB})
# Подготовка VFS для соединения с процессом ramdisk-драйвера
set_target_properties (VfsFs PROPERTIES ${blkdev_ENTITY}_REPLACEMENT ${ramdisk_ENTITY})
Драйвер блочного устройства не может быть скомпонован с VFS, поэтому всегда должен исполняться в контексте отдельного процесса.

Взаимодействие трех процессов: клиента, "файловой версии" VFS и драйвера блочного устройства
Сборка "сетевой версии" программы VFS с сетевым драйвером
В этом примере программа VFS содержит реализации сетевого стека и сетевого драйвера (см. рис. ниже). Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_implementation и dnet_implementation:
CMakeLists.txt
project (vfsnet)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO")
add_executable (VfsNet "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsNet
${vfs_SERVER_LIB}
${vfs_IMPLEMENTATION_LIB}
${dnet_IMPLEMENTATION_LIB})
# Отключение драйвера блочного устройства
set_target_properties (VfsNet PROPERTIES ${blkdev_ENTITY}_REPLACEMENT "")

Взаимодействие процесса Client с процессом "сетевой версии" VFS
Сборка "сетевой версии" программы VFS без сетевого драйвера
В этом примере "сетевая версия" программы VFS не содержит реализацию сетевого драйвера (см. рис. ниже). (Сетевой драйвер будет исполняться в контексте отдельного процесса. Взаимодействие с драйвером будет происходить через IPC с помощью библиотеки dnet_client.) Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_implementation и dnet_client:
CMakeLists.txt
project (vfsnet)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO")
add_executable (VfsNet "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsNet
${vfs_SERVER_LIB}
${vfs_IMPLEMENTATION_LIB}
${dnet_CLIENT_LIB})
# Отключение драйвера блочного устройства
set_target_properties (VfsNet PROPERTIES ${blkdev_ENTITY}_REPLACEMENT "")

Взаимодействие трех процессов: клиента, "сетевой версии" VFS и сетевого драйвера
Сборка "полной версии" программы VFS
Если в программу VFS требуется включить реализации сетевого стека и файловых систем, то нужно выполнить компиляцию файла реализации vfs.c и компоновку с библиотеками vfs_server, vfs_implementation, dnet_implementation (или dnet_client в случае исполнения сетевого драйвера в контексте отдельного процесса), а также библиотеками реализации файловых систем.