web-dev-qa-db-ja.com

CLionでは、ヘッダーのみのライブラリ:ファイルは「どのプロジェクトターゲットにも属していません。コード洞察機能が正しく動作しない可能性があります」

Cmakeコマンドでセットアップされたヘッダーのみのライブラリプロジェクトがあります。

add_library(my_library INTERFACE)

そして私も追加しました

target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})

しかし、ソースファイルを開くと、次の警告が表示されます。

このファイルはどのプロジェクトターゲットにも属していません。コードインサイト機能が正しく動作しない可能性があります

そして、コード補完などの多くの機能を失います。

CLionがヘッダーのみのライブラリで通常の機能を提供するようにこれを設定する適切な方法は何ですか?

42
xaxxon

小さな背景

プロジェクトはヘッダーのみではありませんでしたが、CMakeファイルが明らかにそのフォルダーをinclude_directoryとマークしていても、incフォルダーからのオープンファイルは前述の警告を投げていましたが、私は同じ問題を抱えていました。

* .hppファイルは$ {SOURCE}に属していません

include_directories("${PROJECT_SOURCE_DIR}/inc/")
add_subdirectory(src)
add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE})

これは完全に有効なCMakeファイルであり、インクルードファイルをソースファイルに追加することは慣用的ではないため、CMakeファイルを修正したくありませんでした。

ソリューション

公式の JetBrains Forum で説明されているように、CMakeファイルは実際に有効であり、CLionがヘッダーファイルを適切にインデックス付けできないため、警告が表示されます。リンクから抽出された推奨される回避策は、フォルダーを右クリックしてMark directory as | Library Files/Project Sources and Headers

そのため、このヘッダーは実行可能ファイルに含まれておらず、CLionは一部のコード洞察機能が正しく動作しない可能性があることを通知します。回避策として、「ディレクトリにマークを付ける」ライブラリファイル/プロジェクトソースとフォルダーのヘッダーを使用できます。

68
sjaustirni

Clionは、CMakeビルドシステムからソースファイルに関する情報を取得します。ソースリストにcppファイルを追加すると、CMakeは同じ名前のヘッダーを自動的に通知します。したがって、cpp/h名が異なる場合(またはcppファイルがまったくない場合)、ヘッダーを手動で含める必要があります。

set(Sources my_lib.cpp)
set(Headers header_of_my_lib.h)
add_executable(superlib ${Sources} ${Headers})

実行可能ファイルがない場合は、最後の行を省略できますが、CLionはファイルを認識します

2
Valdemar

次のように、ヘッダーファイルをプロジェクトに追加できます。

set(SOURCE_FILES main.cpp MyClass1.cpp MyClass1.h MyClass2.cpp MyClass2.h)

次のような複数のステップで設定することもできます。

set(SOURCE_FILES main.cpp)
set(SOURCE_FILES ${SOURCE_FILES} MyClass1.cpp MyClass1.h)
set(SOURCE_FILES ${SOURCE_FILES} MyClass2.cpp MyClass2.h)

コメントで述べたように、おそらくヘッダーファイルをプロジェクトに追加するべきではありません。

0
Azurespot