我正在使用集成开发环境(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/*
我需要解决以下两个问题:
config
,doc
,idl
,include
,proto
,
test
,CHANGELOG
,LICENSE
和README.md
cmake
以及 Qt5 的 CMake 模块的路径。阅读以下帖子后,似乎没有“干净”的解决方案 所描述的问题:
add_custom_target
使用“虚拟”构建目标。我已经尝试了以下内容;
add_library
函数的输入:不
因为以下内容适用于对象库:
对象库可能只包含编译源文件,头文件和 其他不会影响正常库链接的文件(例如.txt)。
add_library
函数的输入:不
工作,因为它导致静态库“从头开始”构建。原因
是两个add_library
函数调用的输入文件不同
这种方法。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
... [...]
最后,这是我的两个问题:
感谢您阅读这篇长篇文章。我写下了所有细节以确保 其他人不会遇到同样的问题。