QtCreator CMake 项目 - 如何显示所有项目文件
QtCreator CMake project - how to show all project files
我使用QtCreator 打开CMake 项目。除了 CMakeLists.txt 之外的一些目录仅包含头文件 *.h,对于这些目录,QtCreator 在项目树视图中仅显示 CMakeLists.txt。如何解决?我需要查看 QtCreator 中的所有项目文件。
我建议您将项目视图切换到文件系统。这将显示一个视图,您可以在其中查看所需的任何文件:
如果您仍然需要“项目”模式,您可能希望通过单击向右数第二个按钮将项目视图分成两部分。
您应该将头文件添加到您的源文件列表中: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>运行 Cmake)。
将项目作为文件系统查看根本不是解决方案,因为您的项目编辑器设置不适用。
而且我不喜欢将 headers 添加到可执行目标,因为它们实际上不属于那里。您有效地削弱了项目文件以很好地与一个特定的 IDE 一起工作......不好。
恕我直言,更清洁的选项是:
FILE(GLOB_RECURSE LibFiles "include/*.hpp")
add_custom_target(headers SOURCES ${LibFiles})
作为奖励,您可以将包含的内容显示在单独的文件夹中。
(借自https://cmake.org/pipermail/cmake/2012-August/051811.html)
你可以试试CMakeProjectManager2。显示所有已传播到上游的文件的代码作为概念证明。应用了概念,但由于某些原因不能按原样应用代码。所以,上游的简单等待功能。
基于另一个提出相同问题的线程,我找到了该问题的通用解决方案,适用于所有 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 中的任何目标使用,添加以下调用(毕竟可以在最顶层 CMakeLists.txt 中进行 add_subdirectory :
include(add_ide_support.cmake)
target_add_ide_support(some-target)
有一个关于此问题的已关闭错误报告:CMake project shows no files。
在那种特殊情况下,问题出在所选择的生成器 Ninja 上,它不受 QtCreator 的很好支持。
Please change that to "CodeBlocks - Ninja". Creator needs the CodeBlocks extra generator.
You should see a warning about that when hovering the kit (and the kit should have a warning icon in front of its name).
使用 CodeBlocks - Ninja 也为我解决了这个问题。
总的来说,尝试一些生成器可能会有所帮助...
我使用QtCreator 打开CMake 项目。除了 CMakeLists.txt 之外的一些目录仅包含头文件 *.h,对于这些目录,QtCreator 在项目树视图中仅显示 CMakeLists.txt。如何解决?我需要查看 QtCreator 中的所有项目文件。
我建议您将项目视图切换到文件系统。这将显示一个视图,您可以在其中查看所需的任何文件:
如果您仍然需要“项目”模式,您可能希望通过单击向右数第二个按钮将项目视图分成两部分。
您应该将头文件添加到您的源文件列表中: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>运行 Cmake)。
将项目作为文件系统查看根本不是解决方案,因为您的项目编辑器设置不适用。 而且我不喜欢将 headers 添加到可执行目标,因为它们实际上不属于那里。您有效地削弱了项目文件以很好地与一个特定的 IDE 一起工作......不好。 恕我直言,更清洁的选项是:
FILE(GLOB_RECURSE LibFiles "include/*.hpp")
add_custom_target(headers SOURCES ${LibFiles})
作为奖励,您可以将包含的内容显示在单独的文件夹中。 (借自https://cmake.org/pipermail/cmake/2012-August/051811.html)
你可以试试CMakeProjectManager2。显示所有已传播到上游的文件的代码作为概念证明。应用了概念,但由于某些原因不能按原样应用代码。所以,上游的简单等待功能。
基于另一个提出相同问题的线程,我找到了该问题的通用解决方案,适用于所有 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 中的任何目标使用,添加以下调用(毕竟可以在最顶层 CMakeLists.txt 中进行 add_subdirectory :
include(add_ide_support.cmake)
target_add_ide_support(some-target)
有一个关于此问题的已关闭错误报告:CMake project shows no files。
在那种特殊情况下,问题出在所选择的生成器 Ninja 上,它不受 QtCreator 的很好支持。
Please change that to "CodeBlocks - Ninja". Creator needs the CodeBlocks extra generator.
You should see a warning about that when hovering the kit (and the kit should have a warning icon in front of its name).
使用 CodeBlocks - Ninja 也为我解决了这个问题。
总的来说,尝试一些生成器可能会有所帮助...