Bazel和CMake都是用于构建软件项目的工具,但它们之间有一些重要的区别和特点:
-
Bazel:
- Bazel是由Google开发的构建和测试工具,用于构建大规模的软件项目。
- 它采用一种称为“基于规则”的构建系统,它利用构建规则和依赖关系来自动化构建过程。
- Bazel支持多种编程语言,包括C++、Java、Python等,并提供了高度并行化的构建过程,能够高效地处理大型项目。
- Bazel具有强大的缓存和增量构建功能,能够快速地重新构建项目,并且在构建结果的可重现性和一致性方面表现出色。
-
CMake:
- CMake是一个跨平台的构建系统,用于管理和构建C++项目。
- 它采用基于文本的CMakeLists.txt文件来描述项目的结构和构建过程,允许开发人员使用简洁的语法定义项目的构建规则。
- CMake生成特定于平台的构建文件(如Makefile、Visual Studio项目文件等),然后使用相应的构建工具进行实际的构建过程。
- CMake具有广泛的平台和编译器支持,可以方便地在不同的操作系统和开发环境中使用,并且易于学习和使用。
虽然Bazel和CMake都可以用于构建C++项目,但它们在设计理念、构建方式和功能特性上有所不同。选择使用哪种工具取决于项目的规模、复杂性和团队的偏好,以及所需的特定功能和性能要求。
windows
cmake
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Example)
add_executable(Example main.cpp)
main.cpp
#include <iostream>
int main(){
std::cout<< "hello22" <<std::endl;
std::cout<< "world22" <<std::endl;
return 0;
}
终端指令
终端打开该文件夹,输入以下指令
cmake .
cmake --build .
cd Debug
.\Example.exe
bazel
BUILD
load("@rules_cc//cc:defs.bzl", "cc_binary")
cc_binary(
name = "hello-world",
srcs = ["hello-world.cc"],
)
hello-world.cc
#include <ctime>
#include <string>
#include <iostream>
std::string get_greet(const std::string& who) {
return "Hello " + who;
}
void print_localtime() {
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result));
}
int main(int argc, char** argv) {
std::string who = "world";
if (argc > 1) {
who = argv[1];
}
std::cout << get_greet(who) << std::endl;
print_localtime();
return 0;
}
终端运行指令
bazel build hello-world
找到exe文件运行
.\bazel-bin\main\hello-world.exe
Ubuntu
cmake
touch main.c CMakeLists.txt
CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (demo)
add_executable(main main.c)
main.c
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
终端指令
cmake build .
找到可执行文件,也就是CMakeLists.txt里面add_executable里面的第一个参数
./main
…更新中…