QtCreator CMake项目 - 如何显示所有项目文件

32

我使用QtCreator打开CMake项目。除了CMakeLists.txt之外的一些目录仅包含头文件*.h,对于这些目录,QtCreator在项目树视图中仅显示CMakeLists.txt。如何修复?我需要从QtCreator中看到所有项目文件。

6个回答

28

将项目视为文件系统根本不是解决方案,因为您的项目编辑器设置不会应用。 而且,我不喜欢向可执行目标添加头文件,因为它们实际上并不属于那里。您会有效地破坏项目文件,使其与特定的IDE良好配合使用...这不好。 在我看来,更清晰的选择是:

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

作为额外的奖励,您可以在一个单独的文件夹中看到您的包含文件。(摘自https://cmake.org/pipermail/cmake/2012-August/051811.html)

16

我建议您将项目视图切换到“文件系统”。这将显示一个视图,您可以在其中查看任何文件:

enter image description here

如果您仍然需要“项目”模式,可能需要点击最右侧第二个按钮将项目视图分成两个。


1
好的,但是CMake文件中的哪个语句会导致文件在项目树视图中可见? - Irbis
5
很遗憾,文件视图是扁平的,因此不能完全替代项目视图。 - Zulan
@DanielBrunner 这是一台MacBook Pro Retina。 - Jingjie Zheng
@feedc0de:准确来说,这不是关于分辨率,而是关于DPI(每英寸点数)。你可能有一台4K 40英寸屏幕,其DPI正常(通常约为96),截图看起来还可以。或者你可能有一台4K 16英寸笔记本电脑,它具有高DPI(例如~192),截图看起来会很大。 - Adrian Maire
文件系统视图非常好,当您隐藏面包屑(附件图标)并在路径滚动下拉菜单中选择您的项目时。在项目视图中,平面列表已在QtCreator 4.11.1中得到修复(https://bugreports.qt.io/browse/QTCREATORBUG-23372)。 - Kiruahxh
显示剩余2条评论

8

您应将头文件添加到源文件列表中: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)。


6
CMake官方不推荐使用glob命令来收集源文件,因为这样做会导致CMake无法检测到必须重新生成的情况,例如添加、删除或重命名文件。 - void.pointer

4

根据另一个提出同样问题的帖子,我找到了一个通用的解决方案,适用于所有IDE(至少已经在QtCreator和Visual Studio中进行了测试)。

可以在此处找到:https://github.com/sauter-hq/cmake-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
我曾经遇到一个问题,就是已接受的解决方案无法在我的项目头文件中查找一些外部头文件(来自点云库PCL)。而采用这种方法解决了这个问题。 - mikkola

1

关于这个问题,有一个已关闭的错误报告:CMake项目未显示文件

在那种情况下,问题出在选择的生成器Ninja上,因为QtCreator对其支持不够好。

请将其更改为“CodeBlocks - Ninja”。Creator需要CodeBlocks额外的生成器。

当悬停在工具包上时,您应该会看到有关此事的警告(并且该工具包的名称前面应该有一个警告图标)。

对我来说,使用CodeBlocks - Ninja也解决了这个问题。

总的来说,尝试几个生成器可能会有所帮助...


1
你可以尝试使用CMakeProjectManager2。代码展示了所有已传播到上游的文件作为概念验证。该概念已应用,但由于某些原因无法直接使用代码。因此,在上游需要等待一个简单的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接