Ninja是一个极简、高性能的构建系统build system主要用来自动编译代码、链接程序、管理依赖。你可以把它理解成 “比 Make 更快、更简单的下一代构建工具” Ninja 本质就是“根据规则把源代码.cpp变成可执行文件.exe”和 Make 的区别:重点对比MakeNinja设计目标通用构建工具极致速度语法复杂非常简单执行速度一般很快特别是大工程自动依赖较复杂原生支持常见搭配手写 MakefileCMake 生成 Ninja 结论小项目Make 就够大项目芯片仿真 / 编译系统Ninja 更合适用Ninja构建 SystemC 环境本质就是把你之前用 Makefile 的流程改成build.ninja。优点是更快、更简单依赖管理、更适合大工程比如仿真平台。我直接给你一套可用模板 原理解释 常见坑你可以直接跑。一、前提准备你需要已安装g你已经有了来自 MSYS2ninja已编译好 SystemC或有现成库例如你当前路径类似C:/msys64/home/xxx/systemc-2.3.4二、最小 Ninja 构建文件创建build.ninja# Config cxx gsystemc_home C:/msys64/home/xxx/systemc-2.3.4cxxflags -I$systemc_home/include -stdc17 -gldflags -L$systemc_home/lib-linux64 -lsystemc -lm# Rules rule compilecommand $cxx $cxxflags -c $in -o $outrule linkcommand $cxx $in -o $out $ldflags# Build build hello.o: compile hello.cppbuild sim.exe: link hello.odefault sim.exe三、执行构建ninja运行./sim.exe四、CMake Ninja整体架构先建立正确认知CMakeLists.txt 描述工程 ↓ cmake -G Ninja 生成 build.ninja ↓ ninja 真正编译 分工工具作用CMake“写规则”Ninja“跑规则”g“干活编译”最小可运行 SystemC 工程目录结构建议这样搞soc_project/├── CMakeLists.txt├── cmake/│ └── FindSystemC.cmake (可选)├── include/│ ├── common.h│ ├── fifo.h│ └── noc.h├── src/│ ├── fifo.cpp│ ├── noc.cpp│ └── memory.cpp├── tb/│ └── tb_top.cpp└── build/ 这结构基本等价于RTLmodule划分TB验证平台SoC系统级集成顶层 CMakeLists.txt核心cmake_minimum_required(VERSION 3.16)project(SoC_Sim)set(CMAKE_CXX_STANDARD 17)# SystemC路径 set(SYSTEMC_HOME C:/msys64/home/yanshix/systemc-2.3.4)include_directories(${SYSTEMC_HOME}/include${PROJECT_SOURCE_DIR}/include)link_directories(${SYSTEMC_HOME}/lib-linux64)# 子模块 add_subdirectory(src)add_subdirectory(tb)src模块模拟“硬件模块层”src/CMakeLists.txtadd_library(soc_corefifo.cppnoc.cppmemory.cpp)示例fifo.h#pragma once#include systemcSC_MODULE(FIFO) {sc_core::sc_inbool clk;sc_core::sc_fifoint fifo;SC_CTOR(FIFO) : fifo(16) {SC_THREAD(run);sensitive clk.pos();}void run() {while (true) {fifo.write(1);wait();}}};tb模块验证平台tb/CMakeLists.txtadd_executable(simtb_top.cpp)target_link_libraries(simsoc_coresystemcm)tb_top.cpp顶层仿真#include systemc#include fifo.hint sc_main(int argc, char* argv[]) {sc_core::sc_clock clk(clk, 10, sc_core::SC_NS);FIFO fifo_inst(fifo_inst);fifo_inst.clk(clk);sc_core::sc_start(100, sc_core::SC_NS);return 0;}构建步骤关键进入项目目录mkdir buildcd build生成 Ninja 构建文件cmake -G Ninja .. 会生成build.ninja执行编译ninja运行./sim