我正在尝试将 spdlog(仅标头日志库)集成到 C++ 项目中,但我无法让 CMake 正确识别包含路径。我在 Ubuntu 18.04 上使用最新的 CLion 和 CMake 3.10.2。
我的项目结构如下所示:
Project Dir
|- libs
| |- spdlog #this is the include directory taken straight from GitHub
|
|- src
| |-...
|- CMakeLists.txt
在CMakeLists.txt
文件中我定义了包含目录:
include_directories("libs/")
现在,当我尝试写入#include <spdlog/spdlog.h>
位于src/
CLion 中的头文件时,会抱怨它无法找到spdlog.h
,即使我已经检查过并且该文件肯定在spdlog
文件夹中。在 include 语句中使用引号而不是尖括号并不能解决问题,但是使用相对于文件的路径(例如../libs/spdlog/spdlog.h
)可以正常工作。更让我困惑的是,在对应头文件的源文件中,我可以包含该文件没有问题。
我无法在任何地方找到类似的问题,我正在努力理解是什么导致 CMake 或 CLion 表现得像这样。
编辑:根据 Matthieu Brucher 的建议,我尝试使用包含文件夹的完全限定路径,但它仍然不起作用。问题似乎是在标题中似乎无法识别文件夹,因为它们在源文件中工作。
EDIT2:这是CMakeLists.txt
我正在使用的全部内容。它嵌套在与整个项目的顶层不同的目录CMakeLists.txt
中,因为这是我在网上找到的唯一解决方案,可以在 CLion 的解决方案中获得类似于 VS 的多个项目的东西。但是,由于所有路径都是相对的,我认为这不是问题。我也知道 spdlog 是一个 C++11 库,但在不久的将来我会在其他地方需要一些 C++14 功能。
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(TokenEngine VERSION 0.0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_FILES src/Application.cpp src/Application.hpp src/EntryPoint.hpp src/Logger.cpp src/Logger.hpp)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/")
add_library(TokenEngine SHARED ${SOURCE_FILES})
#Expose the public API of the engine to any project that might use it
target_include_directories(TokenEngine PUBLIC include)
EDIT3:当我试图重新创建错误以显示以某种方式给出的完整消息时,它已经消失了,被一个与 CMake 完全无关的不同消息所取代......