6

VisualStudio内のフォルダー/フィルターにファイルを追加できないというCMakeの問題が発生しています。

# Add folders to filters
file(GLOB_RECURSE DATABASE_SRCS     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h)
file(GLOB_RECURSE LOG_SRCS          RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h)
file(GLOB_RECURSE NETWORK_SRCS      RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h)
file(GLOB_RECURSE THREADING_SRCS    RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h)
file(GLOB_RECURSE UTILS_SRCS        RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h)

source_group(database   FILES ${DATABASE_SRCS})
source_group(log        FILES ${LOG_SRCS})
source_group(network    FILES ${NETWORK_SRCS})
source_group(threading  FILES ${THREADING_SRCS})
source_group(utils      FILES ${UTILS_SRCS})

この問題を引き起こしている可能性のある問題は、 'sが(または他のディレクトリ)にあるが相対的なGLOB_RECURSEファイルを返すことです。${CMAKE_CURRENT_SOURCE_DIR}/database

たとえば、にというファイルがありdatabase/ますdbcore.cpp。このファイルはとして追加さDATABASE_SRCSdbcore.cppますが、メインディレクトリ(つまり)内のファイルも追加されますが、。などの${CMAKE_CURRENT_SOURCE_DIR}相対パスがあります。database/../common.h

もう1つの問題は、VisualStudioプロジェクト内にデフォルトの「ヘッダーファイル」および「ソースファイル」フィルターが既に存在することです。

CMake2.8.6とVisualStudio11/2012を使用しています。

4

1 に答える 1

9

file(GLOB_RECURSE...毎回すべてのファイルを返す呼び出しを避けるには、次のようなものを使用します。

file(GLOB_RECURSE DATABASE_SRCS
         RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
         ${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/database/*.h)

これにより、呼び出しが適切に機能するようにDATABASE_SRCSdatabase/dbcore.cpp;database/dbcore.h;...べき値が設定されます。source_group

ただし、のドキュメントからfile(GLOB

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

完全な詳細を表示するには、実行します

cmake --help-command file

プロジェクト ファイルを一覧表示する一般的に推奨される方法は、手動で CMakeLists.txt に追加することです。

最終的な問題に答えるために、Visual Studio の既定の「ヘッダー ファイル」と「ソース ファイル」が空の場合 (つまり、すべてのファイルが他のフォルダーに表示される場合)、それらは表示されません。これらの既定値が存在しても、 を使用して作成されたフォルダーには影響しませんsource_group

于 2012-06-11T00:16:08.140 に答える