ヘッダーのみのログ ライブラリである spdlog を C++ プロジェクトに統合しようとしていますが、CMake でインクルード パスを正しく認識させるのに問題があります。Ubuntu 18.04 で CMake 3.10.2 で最新の CLion を使用しています。
私のプロジェクト構造は次のようになります:
Project Dir
|- libs
| |- spdlog #this is the include directory taken straight from GitHub
|
|- src
| |-...
|- CMakeLists.txt
ファイルCMakeLists.txt
では、インクルード ディレクトリを定義します。
include_directories("libs/")
CLion#include <spdlog/spdlog.h>
にあるヘッダー ファイルに書き込もうとすると、チェックしてもファイルが確実にフォルダー内にあるにもかかわらず見つからないというエラーが表示されます。インクルード ステートメントで山かっこの代わりに引用符を使用しても問題は解決しませんが、ファイルに対する相対パス (例: ) を使用すると問題なく機能します。私にとってさらに混乱しているのは、ヘッダーに対応するソースファイルに問題なくファイルを含めることができるということです。src/
spdlog.h
spdlog
../libs/spdlog/spdlog.h
この問題のようなものをどこにも見つけることができず、CMake または CLion がこのように動作する原因を理解するのに苦労しています。
編集:Matthieu Brucher の提案に従って、インクルード フォルダーへの完全修飾パスを使用しようとしましたが、まだ機能しません。問題は、フォルダーがソース ファイルで機能するため、ヘッダーで認識されないように見えることです。
CMakeLists.txt
EDIT2:これが私が使用している全体です。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 とはまったく関係のない別のものに置き換えられました...