#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. Я только что обновил вопрос. Я также понял, что проблема может быть в чем-то другом. Это более масштабный проект, и я пытаюсь свести его к минимуму здесь, чтобы легко объяснить это. Спасибо