Я пытаюсь использовать современный cmake, и я столкнулся с проблемой, когда во всех моих операторах #include
нет папок, и это чертовски запутанно. Вот пример
Структура проекта:
root:
- CMakeLists.txt
- core
- CMakeLists.txt
- core.h
- core.cpp
- bin
- bin.cpp
- CMakeLists.txt
- other_dirs
- ...
Root CMakeLists.txt
cmake_minimum_required(VERSION 3.1)
project(scratch)
add_subdirectory(core)
add_subdirectory(bin)
bin / CMakeLists.txt
add_executable(x2_cli x2_cli.cpp)
target_link_libraries(x2_cli core)
core / CMakeLists.txt
add_library(core core.cpp core.h)
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Я хотел бы написать свои включаемые операторы наподобие #include "core/core.h"
, но с этой стратегией мне нужно просто написать #include "core.h"
.Я думаю, что это очень сбивает с толку, потому что вы не понимаете, какие заголовочные файлы принадлежат каким библиотекам!
Есть ли способ исправить это, что также не позволяет мне #include
создавать вещи из других папок, которые яне должен?Например, #include other_dir/bad.h
в идеале должно произойти сбой во время компиляции.Нужна ли другая структура каталогов?Может быть, есть CMake способ сделать это?
Просто написать target_include_directories(core PUBLIC ..)
недостаточно, потому что это загрязняет мой путь включения и вводит в заблуждение.