CMake — упорядочивает файлы lib в подпапки

#c #cmake

Вопрос:

Можно ли организовать файлы в библиотеке в подпапки? Например:

  lib_a
   |___ sub_1
   |       |__ include
   |       |       |______ file_1.h
   |       |______ file_1.cpp
   |___ sub_2
   |       |__ include
   |       |       |______ file_2.h
   |       |______ file_2.cpp
   |___ sub_3
   |       |__ include
   |       |       |______ file_3.h
   |       |______ file_3.cpp
   |___ CMakeLists.txt
 

Я не могу заставить это работать. Вот как я это делаю:

 set(LIBA_SRC
     "./sub_1/file_1.cpp"
     "./sub_2/file_2.cpp"
     "./sub_3/file_3.cpp"
)
set(LIBA_H
     "./sub_1/include/file_1.h"
     "./sub_2/include/file_2.h"
     "./sub_3/include/file_3.h"
)

add_library(lib_a ${LIBA_SRC} ${LIBA_H})
target_compile_features(lib_a PUBLIC cxx_std_14)
set_target_properties(lib_a PROPERTIES LINKER_LANGUAGE CXX)

target_include_directories(lib_a PUBLIC 
    "sub_1/include"
    "sub_2/include"
    "sub_3/include"
    )
 

Редактировать:
Я думал, что проблема связана с тем, как я реализовал cmake для lib_a, но, похоже, проблема в том, откуда я связываю библиотеку lib_a.
У меня есть приложение, которое я определил как:

 add_executable(my_app "my_app.cpp" )
target_compile_features(my_app PRIVATE cxx_std_14)

target_link_libraries(my_app PRIVATE lib_a)
 

Я могу запустить программу, но редактор говорит для каждого #включить «файл_1.h», #включить «файл_2.h» и #включить «файл_3.h»

Идентификатор E0020 «file_1» не определен

и

E1696 не удается открыть исходный файл «file_1.h»

И то же самое для file_2.h и file_3.h. Однако, как было сказано ранее, программа может правильно компилироваться и запускаться.

Комментарии:

1. Что значит «не удается заставить это работать»? Жалуется ли CMake на неуравновешенных " персонажей в вашем CMakeLists.txt?

2. Я забыл закрыть строку с «, я только что исправил сообщение/вопрос. Проблема в том, что Visual Studio говорит, что не может найти исходные коды в редакторе. Однако, как ни странно, я могу скомпилировать его и запустить.

3. Затем отредактируйте свой вопрос с фактическим сообщением об ошибке.

4. Я только что обновил вопрос. Я также понял, что проблема может быть в чем-то другом. Это более масштабный проект, и я пытаюсь свести его к минимуму здесь, чтобы легко объяснить это. Спасибо