如何将结构带入Modern CMake包括路径

时间:2018-05-27 17:47:04

标签: c++ cmake

我正在尝试使用现代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 ..)不够好,因为它污染了我的包含路径,这会产生误导。

0 个答案:

没有答案