如果使用CMake构建系统,Qt Creator IDE的“Projects”视图中的可见文件

时间:2015-03-28 12:29:27

标签: c++ qt build cmake qt-creator

简介

我正在使用集成开发环境(IDE)Qt Creator v3.3.1 以及在C ++编程中开发的构建系统CMake v3.2.1 语言。

目前我正在实现自己的自定义构建“框架”,以便我可以使用 我的每个项目中都有相同的 CMake 模块。 框架支持 从CORBA和Protocol Buffers接口设计生成源文件 例如,语言(IDL)文件。目前我正在实施支持 Qt Framework v5。

我的项目的目录结构如下(使用 Convention Over 构造):

├── cmake              # Must contain source files of the custom "CMake"
│                      # framework (usually as a shared directory).
├── config             # May contain configuration files for the application.
├── doc                # May contain documentation files.
│   └── example        # May contain .cc files for example executables.
├── form               # May contain "Qt Framework" .ui files.
├── idl                # May contain CORBA .idl files.
├── include            # May contain .h files in an arbitrary directory
│                      # structure.
├── proto              # May contain "Protocol Buffers" .proto files.
├── src                # May contain .cc files in an arbitrary directory
│   │                  # structure.
│   └── main.cc        # Source definition file for the executable of the
│                      # application.
├── test               # May contain files for automated tests.
├── CHANGELOG
├── CMakeLists.txt
├── LICENSE
├── README.md
├── run_application.sh
└── run_build.sh

我使用* -nix命令tree来生成上面的输出。

除包含“框架”的cmake目录之外的所有目录都是 可选的。

“框架”构建了一个Object Library加上一个静态库(和 可选的共享库来自src目录中的文件(忽略 src/main.cc - 始终是主可执行应用程序的源 - 如果存在的话。)

因此,通过“框架”中的 CMake 完成以下内容:

add_library(${PROJECT_NAME}_objlib
            OBJECT ${PROJECT_DEFINITION_SOURCE_FILES_LIST})
add_library(${PROJECT_NAME}_staticlib
            STATIC
            $<TARGET_OBJECTS:${PROJECT_NAME}_objlib>)
target_link_libraries(${PROJECT_NAME}_staticlib
                      ${PROJECT_LINK_LIBRARIES_LIST})
if(OPTION_BUILD_SHARED)
  add_library(${PROJECT_NAME}_sharedlib
              SHARED
              $<TARGET_OBJECTS:${PROJECT_NAME}_objlib>)
  target_link_libraries(${PROJECT_NAME}_sharedlib
                        ${PROJECT_LINK_LIBRARIES_LIST})
endif()

正如您所看到的,只有源定义文件(src/*.cc)用作 输入add_library函数。

问题

上面描述的构建方法在命令行中运行良好,但是在 Qt Creator的“项目”视图只有以下内容可见:

  • cmake/*
  • ../*/usr/lib64/cmake/Qt5*
  • form/*
  • src/*

我需要解决以下两个问题:

  1. 显示当前在“项目”视图中不可见的文件和目录 Qt Creator 。在这种情况下,configdocidlincludeprototestCHANGELOGLICENSEREADME.md
  2. 隐藏 Qt Creator 的“项目”视图中的目录。在这种情况下 cmake以及 Qt5 CMake 模块的路径。
  3. 阅读以下帖子后,似乎没有“干净”的解决方案 所描述的问题:

    途径

    我已经尝试了以下内容;

    • 添加 Qt Creator 的“项目”视图中应显示的所有文件 作为对象库add_library函数的输入: 因为以下内容适用于对象库

        

      对象库可能只包含编译源文件,头文件和   其他不会影响正常库链接的文件(例如.txt)。

    •   
    • 添加 Qt Creator 的“项目”视图中应显示的所有文件   作为静态库的add_library函数的输入:   工作,因为它导致静态库“从头开始”构建。原因   是两个add_library函数调用的输入文件不同   这种方法。
    •   
    • 添加 Qt Creator 的“项目”视图中应显示的所有文件   作为add_executable函数的输入:,因为我有   不构建可执行文件的项目。
    •   
      我目前的解决方案使用“虚拟”目标:

    # Parses the source files of the project to be correctly displayed in the
    # "Projects" View of the Integrated Development Environment (IDE) "Qt Creator".
    add_custom_target(qt_creator_parse_project
                      ALL SOURCES ${PROJECT_SOURCE_FILES_LIST})
    

    变量PROJECT_SOURCE_FILES_LIST包含所有文件的绝对路径 应该在 Qt Creator 的“项目”视图中可见。

    这是有效的,唯一的缺陷是构建目标qt_creator_parse_project 可见,例如如果正在运行cmake --build . --target help

    The following are some of the valid targets for this Makefile:
    ... all (the default if no target is provided)
    ... clean
    ... depend
    ... edit_cache
    ... rebuild_cache
    ... <PROJECT_NAME>
    ... qt_creator_parse_project
    ... [...]
    

    问题

    最后,这是我的两个问题:

    1. 是否存在比使用“虚拟”目标填充的更好的解决方案 “项目” Qt Creator 的视图,而不修改构建的行为 处理?如果没有,是否可以隐藏用户的“虚拟”目标?
    2. 是否可以忽略自动添加到的目录和文件夹 通过 CMake Qt Creator 的”项目“视图?如果没有,是否可以使用 Qt 创造者
    3. 感谢您阅读这篇长篇文章。我写下了所有细节以确保 其他人不会遇到同样的问题。

0 个答案:

没有答案