构建工具
是什么
你的项目的源代码写好以后
需要编译,运行,调试,发布
比如,你要写一个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
Tool | File |
---|---|
composer | composer.json |
Make | makefile |
CMake | CMakeLists.txt |
Maven | pom.xml |