当前位置: 首页 > news >正文

CMake创建C++项目与npm创建nodejs项目异曲同工

CMake 创建 C++ 项目​​ 和 ​​npm 创建 Node.js 项目​​ 在概念上有相似之处,但具体实现和生态差异较大。以下是详细对比:


​1. 核心概念对比​

​功能​​npm (Node.js)​​CMake (C++)​
​初始化项目​npm init 生成 package.json手动创建 CMakeLists.txt 或使用 cmake-init 工具
​依赖管理​npm install <package>(自动下载)手动配置 find_package() 或 FetchContent/vcpkg
​构建工具​内置(node 执行)需生成构建系统(如 Makefile、Ninja)再编译
​跨平台支持​依赖 Node.js 环境原生支持多平台(Windows/Linux/macOS)
​生态工具​npxnpm scriptsctestCPackCMake GUI

​2. 项目初始化示例​

​npm (Node.js)​
bash
# 1. 初始化项目
npm init -y  # 生成 package.json
# 2. 添加依赖
npm install express
# 3. 运行项目
node index.js
 
​CMake (C++)​
 

bash

# 1. 创建项目目录结构
mkdir myproject && cd myproject
# 2. 手动编写 CMakeLists.txt(见下文)
# 3. 构建并编译
mkdir build && cd build
cmake .. && make
# 4. 运行程序
./my_executable
 

CMakeLists.txt 示例​​:

 

cmake

cmake_minimum_required(VERSION 3.10)
project(MyProject)  # 类似 npm init 的项目命名add_executable(my_executable src/main.cpp)  # 指定源码文件# 依赖管理(假设需要 OpenCV)
find_package(OpenCV REQUIRED)
target_link_libraries(my_executable PRIVATE ${OpenCV_LIBS})


​3. 依赖管理的差异​

  • ​npm​​:

    • 自动从 npm registry 下载依赖到 node_modules
    • 版本控制通过 package.json 和 lock 文件实现。
  • ​CMake​​:

    • ​无中央仓库​​:依赖需手动配置(系统路径或第三方工具)。
    • ​常见方案​​:
      • vcpkg:类似 npm 的 C++ 包管理器。
        bash
        vcpkg install opencv
        cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
         
      • FetchContent:直接下载源码集成。
         

        cmake

        include(FetchContent)
        FetchContent_Declare(googletestURL https://github.com/google/googletest/archive/refs/heads/main.zip
        )
        FetchContent_MakeAvailable(googletest)
         

​4. 构建流程对比​

​步骤​​npm​​CMake​
1. 生成配置无(直接安装依赖)cmake -S . -B build 生成构建系统
2. 编译/构建无(JS 是解释型语言)cmake --build build
3. 测试npm test(调用 test 脚本)ctest 或自定义 add_test()
4. 打包npm packCPack 生成安装包

​5. 相似性与差异总结​

​相似性​
  • 均需​​配置文件​​(package.json vs CMakeLists.txt)。
  • 支持​​依赖管理​​(但机制不同)。
  • 提供​​跨平台构建​​能力。
​差异​
  • ​依赖处理​​:
    • npm 自动解决依赖树,CMake 需手动链接库路径。
  • ​构建阶段​​:
    • C++ 需显式编译,Node.js 直接运行。
  • ​生态成熟度​​:
    • npm 的包生态更集中,CMake 依赖分散(需结合 Conan/vcpkg 等)。

​6. 快速入门建议​

  • ​C++ 新手​​:

    1. 从 CMakeLists.txt 的最小模板开始。
    2. 使用 vcpkg 管理依赖(类似 npm 体验)。
    3. 结合 IDE(如 VS Code + CMake Tools)简化流程。
  • ​Node.js 转 C++​​:
    注意 ​​编译器的存在​​(如 GCC/MSVC)和 ​​头文件/库文件的路径问题​​。

http://www.xdnf.cn/news/600427.html

相关文章:

  • 基于 ARIMA 与贝叶斯回归的时间序列分析:结合趋势季节性与不确定性量化(附 PyTorch 变分贝叶斯实现)
  • AWS EC2实例安全远程访问最佳实践
  • uniapp原生插件
  • Profibus转Profinet网关赋能鼓式硫化机:智能化生产升级的关键突破
  • 多模态大语言模型arxiv论文略读(九十一)
  • vscode使用ssh链接服务器
  • 飞桨(PaddlePaddle)在机器学习全流程(数据采集、处理、标注、建模、分析、优化)
  • [论文阅读]Pandora: Jailbreak GPTs by Retrieval Augmented Generation Poisoning
  • [ Qt ] | 常见控件(一)
  • Oracle 基础知识作业的使用
  • NLP入门指南:零基础理解自然语言处理
  • 医学人工智能中的分层处理与跨模态融合:深度架构设计研究(基础教程.下)
  • Ensp --四路由练习
  • fpga-编程线性序列机和状态机
  • MySQL 派生表查询导致 Crash 的根源分析与解决方案
  • (万字长文)Django数据库操作——ORM:数据交互显示前端网页
  • JVM——Java 虚拟机的监控及诊断工具(GUI 篇)
  • vue2中,codemirror编辑器的使用
  • SpringMVC(结合源码浅析工作流程)
  • 【Mysql|数据恢复】rm -rf 误删数据库文件恢复
  • opencv彩图-直方图均衡化
  • 论文略读:If Multi-Agent Debate is the Answer, What is the Question?
  • 一条SQL语句的旅程:解析、优化与执行全过程研究
  • 讯联文库开发日志(五)登录拦截校验
  • 《STL--- vector的使用及其底层实现》
  • CAD球体功能梯度材料3D插件
  • Data Whale
  • 今日打卡,Leetcode第四题:寻找两个正序数组的中位数,博主表示就会sorted
  • 飞书知识问答产品测评:让企业玩转AI
  • 外卖跑腿小程序评价系统框架搭建