web-dev-qa-db-ja.com

QtCreator CMakeプロジェクト-すべてのプロジェクトファイルを表示する方法

QtCreatorを使用してCMakeプロジェクトを開きます。 CMakeLists.txt以外のいくつかのディレクトリにはヘッダーファイル* .hのみが含まれ、プロジェクトツリービューのQtCreatorディレクトリにはCMakeLists.txtのみが表示されます。それを修正するには? QtCreatorのすべてのプロジェクトファイルを表示する必要があります。

28
Irbis

プロジェクトをファイルシステムとして表示することは、ソリューションではありません。たとえば、プロジェクトエディターの設定は適用されません。そして、ヘッダーを実行可能ターゲットに追加するのは好きではありません。ヘッダーが実際にはそこに属していないからです。特定のIDEでうまく機能するようにプロジェクトファイルを効果的にクリップします...良くありません。私見クリーナーオプションは次のようになります。

FILE(GLOB_RECURSE LibFiles "include/*.hpp")
add_custom_target(headers SOURCES ${LibFiles})

ボーナスとして、インクルードを別のフォルダーに表示します。 ( https://cmake.org/pipermail/cmake/2012-August/051811.html から借用)

25
Slava

プロジェクトビューをファイルシステムに切り替えることをお勧めします。これにより、必要なファイルを表示できるビューが表示されます。

enter image description here

それでもプロジェクトモードが必要な場合は、右から2番目のボタンをクリックして、プロジェクトビューを2つに分割することができます。

13
Jingjie Zheng

ソースファイルのリストにヘッダーファイルを追加する必要があります:add_executable(${Executable} ${Sources} ${headers})

多くのヘッダーファイルがある場合は、GLOB_RECURSEを使用できます。

FILE(GLOB_RECURSE INC_ALL "headers/*.h")
include_directories("headers")
add_executable(main "main.cpp" ${INC_ALL})

CMakeを再度実行することを忘れないでください(ビルド> Cmakeの実行)。

7

同じ質問をする別のスレッドに基づいて、すべてのIDEで機能する(少なくともQtCreatorとVisual Studioでテストされた)問題の一般的な解決策を見つけました。

ここにあります: https://github.com/sauter-hq/cm​​ake-ide-support

# \brief adds for the given target a fake executable targets which allows all
#        headers and symbols to be shown in IDEs.
# \param target_name Which target properties should be added to the IDE support target.
function(target_add_ide_support target_name)
  if (NOT TARGET ${target_name})
    message(FATAL_ERROR "No target defined with name ${target_name}, cannot target_add_ide_support it.")
  endif()

  set (target_for_ide "${target_name}_ide_support")
  if (NOT TARGET ${target_for_ide})
      file(GLOB_RECURSE target_for_ide_srcs "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx")
      add_executable(${target_for_ide} ${target_for_ide_srcs})
      set_target_properties(${target_for_ide} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
  endif()

  get_target_property(dirs ${target_name} INCLUDE_DIRECTORIES)
  target_include_directories(${target_for_ide} PRIVATE ${dirs})

endfunction(target_add_ide_support)

次に、CMakeLists内のすべてのターゲットに対して使用方法を指定し、次の呼び出しを追加します(すべてのadd_subdirectoryの後に、最上位のCMakeLists.txtで作成できます:

include(add_ide_support.cmake)
target_add_ide_support(some-target)
2
daminetreg

CMakeProjectManager2 を試すことができます。概念実証として既にアップストリームに伝達されているすべてのファイルを表示するコード。概念は適用されますが、何らかの理由でコードをそのまま適用することはできません。したがって、アップストリームの単純な待機機能。

1
Monah Tuk

この問題に関するクローズドバグレポートがあります: CMakeプロジェクトはファイルを表示しません

その特定のケースでは、選択したジェネレーターNinjaに問題がありました。これはQtCreatorで十分にサポートされていません。

それを「CodeBlocks-Ninja」に変更してください。 CreatorにはCodeBlocksの追加ジェネレーターが必要です。

キットにカーソルを合わせると、そのことに関する警告が表示されます(キットの名前の前に警告アイコンが表示されます)。

CodeBlocksを使用して-忍者も私のためにそれを解決しました。

全体的に、いくつかのジェネレーターを試してみると役立つかもしれません...

0
AntonyG