我正在尝试使用现代cmake,而且我遇到了所有#include
语句都没有文件夹的问题,这让人感到困惑。 Here's an example
项目结构:
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)
仓/的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 ..)
不够好,因为它污染了我的包含路径,这会产生误导。