【问题标题】:QtCreator CMake project - how to show all project filesQtCreator CMake 项目 - 如何显示所有项目文件
【发布时间】:2015-02-07 17:07:11
【问题描述】:

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

【问题讨论】:

    标签: c++ c cmake qt-creator


    【解决方案1】:

    将项目视为文件系统根本不是解决方案,因为您的项目编辑器设置例如不适用。 而且我不喜欢将标题添加到可执行目标,因为它们实际上不属于那里。您有效地削弱了项目文件以与一个特定的 IDE 很好地配合......不好。 恕我直言,更清洁的选择是:

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

    作为奖励,您可以在单独的文件夹中显示包含的内容。 (借用https://cmake.org/pipermail/cmake/2012-August/051811.html

    【讨论】:

      【解决方案2】:

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

      如果您仍然需要“项目”模式,您可能希望通过单击右数第二个按钮将项目视图一分为二。

      【讨论】:

      • 好的,但是 CMake 文件中的哪个语句导致文件在项目树视图中可见?
      • 我不确定。但是 CMake 中有声明指定源代码可能会限制项目树视图显示的内容。我怀疑这是 QtCreator 本身的一些内置功能。
      • 不幸的是,文件视图是平面的,因此不足以替代项目视图。
      • 请问您在截屏时显示器的分辨率是多少?看起来很不错!
      • @DanielBrunner 这是一台 MacBook Pro 视网膜
      【解决方案3】:

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

      【讨论】:

      【解决方案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)
      

      【讨论】:

      • 我遇到了一个问题,即接受的解决方案无法在我自己的项目的头文件中查找一些外部头文件(来自 Pointcloud 库 PCL)。应用这种方法反而解决了这个问题。
      【解决方案5】:

      你可以试试CMakeProjectManager2。显示已传播到上游的所有文件的代码作为概念证明。已应用概念,但由于某些原因无法按原样应用代码。所以,上游的简单等待功能。

      【讨论】:

        【解决方案6】:

        有一个关于此问题的已关闭错误报告:CMake project shows no files

        在这种特殊情况下,问题出在所选的生成器 Ninja 上,QtCreator 并没有很好地支持它。

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

        当您将鼠标悬停在套件上时,您应该会看到一个警告(套件名称前应该有一个警告图标)。

        使用 CodeBlocks - Ninja 也为我解决了这个问题。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-07
          • 1970-01-01
          • 2012-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多