跳到主要内容

构建工具

是什么

你的项目的源代码写好以后
需要编译,运行,调试,发布
比如,你要写一个Hello World!

// main.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}

你可能会使用MSVC(cl.exe)或者是g++(g++.exe)来编译并运行
如果不想每次都手动输入命令
可以写一个批处理文件来自动化编译
比如

:: run.bat
@echo off
g++ main.cpp -o "main.exe"
"main.exe"

上面这个就叫Makefile(广义的说法,因为有种固定的构建工具格式叫Makefile)
可以自动化编译你的源文件,按照你想要的方式运行

但是,如果你的项目很复杂
比如你把源文件放在不同的文件夹,或者是引入了第三方库,或者是使用了各种链接
你可能就需要一个专业的工具来管理你的项目的依赖,运行配置
比如Java的Maven和Gradle,C++的CMake和Meson

例如这个用于Qt的CMakeList.txt

cmake_minimum_required(VERSION 3.5) # CMake install : https://cmake.org/download/
project(CUITExamClient LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# set(CMAKE_PREFIX_PATH "$ENV{Qt}/6.4.2/mingw_64") # Qt mingw Kit Dir
set(CMAKE_PREFIX_PATH "$ENV{Qt}/6.4.2/msvc2019_64") # Qt msvc Kit Dir

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 COMPONENTS Network Widgets WebEngineWidgets REQUIRED) # Qt COMPONENTS

aux_source_directory(./src srcs)
qt_standard_project_setup()

# Specify MSVC UTF-8 encoding
# add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
# add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

add_subdirectory(CryptoPP)

add_executable(${PROJECT_NAME}
WIN32 # If you need a terminal for debug, please comment this statement
${srcs}
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets Qt6::WebEngineWidgets Qt6::Network CryptoPP) # 用了什么额外的lib就要在这里写

set_target_properties(${PROJECT_NAME} PROPERTIES
WIN32_EXECUTABLE ON
MACOSX_BUNDLE ON
)

target_include_directories(${PROJECT_NAME} PRIVATE ./CryptoPP/include)
# target_link_libraries(${PROJECT_NAME} PRIVATE debug ${CMAKE_CURRENT_SOURCE_DIR}/CryptoPP/lib/Debug/cryptlib.lib optimized ${CMAKE_CURRENT_SOURCE_DIR}/CryptoPP/lib/Release/cryptlib.lib)

Makefile

ToolFile
composercomposer.json
Makemakefile
CMakeCMakeLists.txt
Mavenpom.xml