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

…更新中…










