如何让QtCreator将构建生成的文件显示在项目视图中?
解决QtCreator不识别CMake生成文件的问题
我之前在QtCreator旧版本里也碰到过一模一样的情况——编译运行完全正常,但生成的文件就是不显示在项目视图里,手动打开还提示不属于项目。其实核心问题是QtCreator 4.4.1这类稍早版本对CMake动态生成文件的自动识别支持有限,得通过CMake配置明确告诉它这些文件属于项目。下面是几个靠谱的解决方法:
方法一:标记生成文件并通过target_sources添加
修改你的CMakeLists.txt,显式标记生成文件为GENERATED属性,再用target_sources把它添加到可执行目标中,这样QtCreator就能正确识别它的归属:
cmake_minimum_required(VERSION 3.5) project(generate_files_from_tool) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) # 保留原有的生成命令 add_custom_command( OUTPUT generated_config.cpp COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/writeSourceFileFromConfigXml.sh ${CMAKE_CURRENT_SOURCE_DIR}/config.xml > ${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp DEPENDS config.xml writeSourceFileFromConfigXml.sh ) # 标记该文件为生成文件,让CMake和QtCreator识别 set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp PROPERTIES GENERATED TRUE) add_executable(tool_with_generated_file main.cpp) # 通过target_sources将生成文件添加到目标中 target_sources(tool_with_generated_file PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp)
修改完成后,在QtCreator里点击项目面板的「Run CMake」按钮刷新配置,生成的generated_config.cpp应该会出现在项目视图的「Generated Files」文件夹下。
方法二:用自定义目标封装生成过程
如果方法一没生效,可以用add_custom_target把生成逻辑封装成独立目标,再让可执行目标依赖它,同时明确声明生成文件是副产品:
cmake_minimum_required(VERSION 3.5) project(generate_files_from_tool) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) # 创建自定义目标负责生成文件,ALL关键字确保默认构建时执行 add_custom_target(generate_config_file ALL COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/writeSourceFileFromConfigXml.sh ${CMAKE_CURRENT_SOURCE_DIR}/config.xml > ${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp DEPENDS config.xml writeSourceFileFromConfigXml.sh BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp ) # 标记生成文件属性 set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp PROPERTIES GENERATED TRUE) add_executable(tool_with_generated_file main.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated_config.cpp) # 让可执行目标依赖生成目标,保证构建顺序正确 add_dependencies(tool_with_generated_file generate_config_file)
BYPRODUCTS关键字会告诉CMake这个文件是生成过程的副产品,QtCreator会依据这个信息把它纳入项目视图的管理范围。
额外注意事项
修改CMake配置后,记得做以下操作确保生效:
- 点击QtCreator左侧项目面板的「Run CMake」按钮刷新配置
- 如果还是没显示,可以尝试关闭项目重新打开,或者删除CMake缓存后重新配置
你提到手动打开文件能跳转是因为QtCreator的代码索引会扫描二进制目录,但项目视图只显示CMake明确告知属于项目的文件,所以关键就是通过CMake把生成文件的信息传递给QtCreator。
内容的提问来源于stack exchange,提问作者Michael Kopp
相关产品推荐
相关产品推荐

