Как использовать наборы файлов в CMakeListsC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать наборы файлов в CMakeLists

Сообщение Anonymous »

В настоящее время я пишу CMakeLists для проекта с несколькими каталогами и пытаюсь использовать наборы файлов и target_sources, поскольку это считается лучше, чем использование target_include_directories, но единственная проблема заключается в том, что я не совсем уверен, что использую его правильно, и хотел бы с этим помочь.

Код: Выделить всё

cmake_minimum_required(VERSION 3.27)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

include(pico_sdk_import.cmake)

project(msc_bare_metal C CXX ASM)

# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

add_subdirectory(file_processing)
add_subdirectory(src)
add_subdirectory(app)
Это CMakeLists.txt для обработки файлов

Код: Выделить всё

set(FATFS_LIB_SOURCES
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/ffsystem.c
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/ffunicode.c
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/diskio.c
)

set(FATFS_LIB_HEADERS
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/diskio.h
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/ffconf.h
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source/ff.h
)

add_library(file_processing)

# Add C sources normally
target_sources(file_processing
PRIVATE
${FATFS_LIB_SOURCES}
file_processing.c
)

target_sources(file_processing
PRIVATE
FILE_SET HEADERS
BASE_DIRS
$ENV{PICO_TINYUSB_PATH}/lib/fatfs/source
${CMAKE_CURRENT_LIST_DIR}
FILES
${FATFS_LIB_HEADERS}
file_processing.h
)

# No need for target_include_directories(), file set handles it

target_link_libraries(file_processing
PUBLIC
pico_stdlib
tinyusb_host
tinyusb_board
hardware_i2c
)
а это CMakeLists.txt для источника

Код: Выделить всё

set(LIBRARY_HEADER  tusb_config.h  msc_app.h )

add_library(src_lib)

target_sources(src_lib
PRIVATE
msc_app.c    )

target_sources(src_lib
PUBLIC
FILE_SET HEADERS
BASE_DIRS
${CMAKE_CURRENT_LIST_DIR}
FILES
${LIBRARY_HEADER} )

target_link_libraries(src_lib PRIVATE file_processing)
и для того, что находится в подкаталоге приложения

Код: Выделить всё

add_executable(main main.c)
target_link_libraries(main PRIVATE file_processing src_lib)
pico_add_extra_outputs(main)
Я получаю ошибку:

Код: Выделить всё

> H:/tinyusb/src/tusb_option.h:257:12: fatal error: tusb_config.h: No such file or directory
257 |   #include "tusb_config.h"
|            ^~~~~~~~~~~~~~~
Чего я не понимаю, поскольку включил его в target_sources с помощью переменной ${LIBRARY_HEADER} и хотел бы знать, что я делаю неправильно.
С уважением

Подробнее здесь: https://stackoverflow.com/questions/798 ... cmakelists
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»