TL; DRCMake добавить библиотеку с подкаталогами
Использование CMake, как я могу включать подкаталоги в библиотеку таким образом, что они могут быть включены без ссылки на каталоги, они постоянно находятся?
End TL; DR
В попытке быть кратким и говорить на более высокие идеи на уровне того, что и как, я удалил все, что я считаю ненужным детали. При необходимости я сделаю изменения. Таким образом, это краткий обзор моей структуры проекта.
ParentDir
--src
----source.cpp
----source.h
----entities_dir
------entity.cpp
------entity.h
------CMakeLists.txt
----CMakeLists.txt
--CMakeLists.txt
--main.cpp
как он в настоящее время стоит, у меня есть библиотека, определенная CMakeLists в каталоге src. Таким образом, я могу включить src-файлы в основном с помощью #include, как показано в #include "src/file.h". Я хотел бы иметь возможность делать то же самое для своих заголовков, которые существуют в подкаталогах src.
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(Project)
add_executable(Project ${SOURCE_FILES} main.cpp)
include_directories(src)
add_subdirectory(src)
target_link_libraries(Project Library) # Engine Libraries
SRC/CMakeLists.txt
file(GLOB SOURCE_FILES *.cpp)
file(GLOB HEADER_FILES *.h)
add_library(Library STATIC ${SOURCE_FILES} ${HEADER_FILES})
main.cpp
#include <source.h> // this works
#include <entity.h> // this does not work but I want it to
#include <entities/entity.h> // this works but I don't want this
int main() {}
Я п Конечно, как это сделать. Я пытался использовать GLOB_RECURSE, add_subdirectory (сущности) и т. Д. Я также попытался создать библиотеку под названием Entities внутри src/entities/CMakeLists.txt и связать ее с link_libraries. Ни один из них не был успешным. Каков правильный способ добиться этого, потому что я думаю, что, вероятно, я совершенно не согласен с этим.
Вам нужен этот путь в пути поиска заголовков компиляторов, который достигается с помощью вызова include_directories(). Вы можете изменить существующий вызов include_directories (src) для include_directories (src src/entities). Я не знаю, как сделать это рекурсивным, и я бы не рекомендовал его. – qexyn
, так что работает. Кажется, мне сложно понять, как вы должны использовать cmake. Я видел, что это обычное явление, когда в каждом каталоге есть cmakelists. Поскольку в этом случае skc cmakelists создает фактическую библиотеку, не должен ли родительский cmake только ссылаться на src cmake и не нуждаться в знаниях поддиректоров src? – tramstheman
@qexyn, если вы хотите оставить ответ, я приму его. – tramstheman