Эх сурвалжийг харах

添加qmake与camke编译介绍

cwc1987 9 жил өмнө
parent
commit
137c3d347c
3 өөрчлөгдсөн 156 нэмэгдсэн , 1 устгасан
  1. 1 0
      SUMMARY.md
  2. 54 0
      qt_and_c++/cmake.md
  3. 101 1
      qt_and_c++/qmake.md

+ 1 - 0
SUMMARY.md

@@ -107,6 +107,7 @@
    * [Qt对象(The QObject)](qt_and_c++/the_qobject.md)
    * [编译系统(Build Systems)](qt_and_c++/build_systems.md)
        * [QMake](qt_and_c++/qmake.md)
+       * [CMake](qt_and_c++/cmake.md)
 * [其它(Other)](other/README.md)
    * [协作校正](other/collaboration_correction.md)
 

+ 54 - 0
qt_and_c++/cmake.md

@@ -0,0 +1,54 @@
+# CMake
+
+CMake是由Kitware创造的工具。由于它们的3D可视化软件VTK使得Kitware家喻户晓,当然这也有CMake这个跨平台makefile生成器的功劳。它使用一系列的```CMakeLists.txt```文件来生成平台指定的makefile。CMake被KDE项目所使用,它与Qt社区有一种特殊的关系。
+
+```CMakeLists.txt```文件存储了项目配置。一个简单的hello world使用QtCore的项目如下:
+
+```
+// ensure cmake version is at least 3.0
+cmake_minimum_required(VERSION 3.0)
+// adds the source and build location to the include path
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+// Qt's MOC tool shall be automatically invoked
+set(CMAKE_AUTOMOC ON)
+// using the Qt5Core module
+find_package(Qt5Core)
+// create excutable helloworld using main.cpp
+add_executable(helloworld main.cpp)
+// helloworld links against Qt5Core
+target_link_libraries(helloworld Qt5::Core)
+```
+
+这将使用main.cpp编译一个可执行的helloworld应用程序,并与额外的Qt5Core库链接。编译文件通常会被修改:
+
+```
+// sets the PROJECT_NAME variable
+project(helloworld)
+cmake_minimum_required(VERSION 3.0)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOMOC ON)
+find_package(Qt5Core)
+
+// creates a SRC_LIST variable with main.cpp as single entry
+set(SRC_LIST main.cpp)
+// add an executable based on the project name and source list
+add_executable(${PROJECT_NAME} ${SRC_LIST})
+// links Qt5Core to the project executable
+target_link_libraries(${PROJECT_NAME} Qt5::Core)
+```
+
+CMake十分强大。需要一些时间来适应语法。通常CMake更加适合大型和复杂的项目。
+
+**引用**
+
+[CMake Help](http://www.cmake.org/documentation/) - CMake在线帮助文档
+
+[Running CMake](http://www.cmake.org/runningcmake/)
+
+[KDE CMake Tutorial](https://techbase.kde.org/Development/Tutorials/CMake)
+
+[CMake Book](http://www.kitware.com/products/books/CMakeBook.html)
+
+[CMake and Qt](http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html)
+
+

+ 101 - 1
qt_and_c++/qmake.md

@@ -1 +1,101 @@
-# QMak
+# QMake
+QMake是用来读取项目文件并生成编译文件的工具。项目文件记录了你的项目配置,扩展依赖库和源代码文件。最简单包含一个源代码文件的项目可能像这样:
+
+```
+// myproject.pro
+
+SOURCES += main.cpp
+```
+
+我们编译了一个基于项目文件名称```myproject```的可执行程序。这个编译将只包含```main.cpp```源文件。默认情况下我们会为项目添加QtCore和QtGui模块。如果我们的项目是一个QML应用程序,我们需要添加QtQuick和QtQml到这个链表中:
+
+```
+// myproject.pro
+
+QT += qml quick
+
+SOURCES += main.cpp
+```
+
+现在编译文件知道与Qt的QtQml和QtQuick模块链接。QMake使用```=```,```+=` and ``-=```来指定,添加和移除选项链表中的元素。例如一个只有控制台的编译将不会依赖UI,你需要移除QtGui模块:
+
+```
+// myproject.pro
+
+QT -= gui
+
+SOURCES += main.cpp
+```
+
+当你期望编译一个库来替代一个应用程序时,你需要改变编译模板:
+
+```
+// myproject.pro
+TEMPLATE = lib
+
+QT -= gui
+
+HEADERS += utils.h
+SOURCES += utils.cpp
+```
+
+现在项目将使用```utils.h```头文件和```utils.cpp```文件编译为一个没有UI依赖的库。库的格式依赖于你当前编译项目所用的操作系统。
+
+通常将会有更加复杂的配置并且需要编译个项目配置。qmake提供了```subdirs```模板。假设我们有一个mylib和一个myapp项目。我们的配置可能如下:
+
+```
+my.pro
+mylib/mylib.pro
+mylib/utils.h
+mylib/utils.cpp
+myapp/myapp.pro
+myapp/main.cpp
+```
+
+我们已经知道了如何使用Mylib.pro和myapp.pro。my.pro作为一个包含项目文件配置如下:
+
+```
+// my.pro
+TEMPLATE = subdirs
+
+subdirs = mylib \
+    myapp
+
+myapp.depends = mylib
+```
+
+在项目文件中声明包含两个子项目```mylib```和```myapp```,```myapp```依赖于```mylib```。当你使用qmake为这个项目文件生成编译文件时,将会在每个项目文件对应的文件夹下生成一个编译文件。当你使用```my.pro```文件的makefile编译时,所有的子项目也会编译。
+
+有时你需要基于你的配置在不同的平台上做不同的事情。qmake推荐使用域的概念来处理它。当一个配置选项设置为true时使一个域生效。
+
+例如使用unix指定utils的实现可以像这样:
+
+```
+unix {
+    SOURCES += utils_unix.cpp
+} else {
+    SOURCES += utils.cpp
+}
+```
+
+这表示如果CONFIG变量包含了unix配置将使用对应域下的文件路径,否则使用其它的文件路径。一个典型的例子,移除mac下的应用绑定:
+
+```
+macx {
+    CONFIG -= app_bundle
+}
+```
+
+这将在mac下创建的应用程序不再是一个```.app```文件夹而是创建一个应用程序替换它。
+
+基于QMake的项目通常在你开始编写Qt应用程序最好的选择。但是也有一些其它的选择。它们各有优势。我们将在下一小节中简短的讨论其它的选择。
+
+**引用**
+
+[QMake Manual](http://doc.qt.io/qt-5//qmake-manual.html) - qmake手册目录。
+
+[QMake Language](http://doc.qt.io/qt-5//qmake-language.html) - 赋值,域和相关语法
+
+[QMake Variables](http://doc.qt.io/qt-5//qmake-variable-reference.html) - TEMPLATE,CONFIG,QT等变量解释
+
+