27

私は CMake が初めてで、誰かが次の問題で助けてくれるかどうか尋ねたいと思います。

それぞれのフォルダーに C++ ソース ファイルとヘッダー ファイルがあり、それらを再帰的に検索する CMake テキスト ファイルを作成したいと考えています。

現在、私はこの方法でそれをやっています:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(CarDetectorDAISY)

file(GLOB_RECURSE SRCS *.cpp)
file(GLOB_RECURSE HDRS *.h)

ADD_EXECUTABLE(stereo_framework  ${SRCS} ${HDRS})
TARGET_LINK_LIBRARIES(stereo_framework) 

これにより、CarDetectorDAISY.slnソリューション ファイルが作成され、ビルドしようとすると、ヘッダー ファイルが見つからないというエラーが表示されます (そのようなファイルまたはディレクトリはありません)。

誰かが私を助けてくれれば本当にありがたいです。ありがとう。

4

3 に答える 3

27

おそらく 1 つまたは複数のinclude_directories通話に失敗しています。呼び出しでファイルのリストにヘッダーを追加してadd_executableも、実際にはコンパイラの検索パスに追加されません。これは、IDE のプロジェクトのフォルダー構造にのみ追加される便利な機能です。

したがって、ルートに /my_lib/foo.h があり、それをソース ファイルに次のように含めたいとします。

#include "my_lib/foo.h"

次に、CMakeLists.txt で次のことを行う必要があります。

include_directories(${CMAKE_SOURCE_DIR})

代わりに、やりたいだけの場合

#include "foo.h"

次に、CMakeLists.txt で、

include_directories(${CMAKE_SOURCE_DIR}/my_lib)


これはfile(GLOB...)、ソースのリストを収集するための推奨される方法ではありません。実際には、CMakeLists.txt に各ファイルを明示的に追加する必要があります。これにより、後でソース ファイルを追加または削除すると、CMakeLists.txt が変更され、次にビルドを試行するときに CMake が自動的に再実行されます。のドキュメントからfile

ソース ツリーからソース ファイルのリストを収集するために GLOB を使用することはお勧めしません。ソースが追加または削除されたときに CMakeLists.txt ファイルが変更されない場合、生成されたビルド システムは CMake に再生成を要求するタイミングを認識できません。

于 2013-07-15T13:16:05.897 に答える