计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1939|回复 Reply: 15
打印 Print 上一主题 Last thread 下一主题 Next thread

[make相关] 编译型语言构建系统选择

[复制链接 Copy URL]

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主
大家用不自带构建系统的编译型语言编写程序时一般使用什么构建方式呢?
单选投票, 共有 52 人参与投票

投票已经结束

11.54% (6)
3.85% (2)
73.08% (38)
3.85% (2)
1.92% (1)
5.77% (3)
0.00% (0)
您所在的用户组没有投票权限

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

来自 8#
 楼主 Author| 发表于 Post on 2025-4-23 19:29:33 | 只看该作者 Only view this author
本帖最后由 ShiyuWang781 于 2025-4-23 19:33 编辑

第六个应该是xmake,之前打错了

395

帖子

8

威望

3906

eV
积分
4461

Level 6 (一方通行)

石墨

2#
发表于 Post on 2025-4-23 15:51:34 | 只看该作者 Only view this author
表面CMake,实则全靠cursor说啥我干啥XD
自在飞花轻似梦,无边丝雨细如愁。

全自动反应动力学(ReaxFF、AIMD、NEP等)后处理工具网页版:http://cc-portal.xyz/reax_tools

410

帖子

5

威望

1630

eV
积分
2140

Level 5 (御坂)

鸩羽

3#
发表于 Post on 2025-4-23 15:56:47 | 只看该作者 Only view this author
Graphite 发表于 2025-4-23 15:51
表面CMake,实则全靠cursor说啥我干啥XD

+1
不过一般我会要求cursor写cmakelists,不然小修重新编译我就抓瞎,命令太长了
某不知名实验组从苞米地里长出来的计算选手

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

4#
 楼主 Author| 发表于 Post on 2025-4-23 16:15:44 | 只看该作者 Only view this author
Graphite 发表于 2025-4-23 15:51
表面CMake,实则全靠cursor说啥我干啥XD

cursor好用吗,我听说cuesor被禁止使用vscode插件了,而且cursor有些功能需要付费。

395

帖子

8

威望

3906

eV
积分
4461

Level 6 (一方通行)

石墨

5#
发表于 Post on 2025-4-23 16:41:09 | 只看该作者 Only view this author
ShiyuWang781 发表于 2025-4-23 16:15
cursor好用吗,我听说cuesor被禁止使用vscode插件了,而且cursor有些功能需要付费。

非常好用,正常用插件,没发现有什么不行的。

密集开发可以氪金20刀一个月,包括cursor tab智能补全(一些常用但是难记的逻辑直接tab出来、一些小错误很方便)、composer(同时修改多个文件)、内置gpt和claude的API(不用再付费)

免费版就是能够自己设置第三方API用chat(单文件修改)的VSCode。至少比Github Copilot、Baidu Comate什么的灵活好用。
自在飞花轻似梦,无边丝雨细如愁。

全自动反应动力学(ReaxFF、AIMD、NEP等)后处理工具网页版:http://cc-portal.xyz/reax_tools

418

帖子

4

威望

2910

eV
积分
3408

Level 5 (御坂)

6#
发表于 Post on 2025-4-23 18:37:20 | 只看该作者 Only view this author
单文件手动编译,简单的多文件工程手写Makefile。

至于复杂的多文件工程,只能捏着鼻子用CMake。CMake的语法是经典的面多了加水,水多了加面,最后加成了一座屎山。它的兼容性策略居然是用数字编号的。看到CMP0048、CMP0057这样的编号,不查手册根本不知道什么意思。而且有的时候是睁眼瞎,明明写在环境变量里的包,就是找不到。有时候都不知道它是来解决问题的还是添乱的。但是很多编程工具只支持CMake,只能说时无英雄使竖子成名。

单独开发一门DSL得不偿失,像Python或Lua这样的通用语言+专用库的方式才是性价比最高的。既能借用该语言现成的工具,用户学习成本也低。

另外这些构建系统可以分为指令式和描述式。指令式有个问题,就是不同指令的执行时间不一样,有的在预处理阶段,有的在编译阶段,有的在安装阶段。都扔在一个文件里,有一部分指令实际上变成了描述式。很多指令式构建系统用起来别扭就是这个原因。像SCons这样的描述式构建系统才是未来的方向,可惜支持的工具太少。别的不说,用Python自己写一个搜库的函数,不比CMake那白痴般的find_package好用?

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

7#
 楼主 Author| 发表于 Post on 2025-4-23 19:26:56 | 只看该作者 Only view this author
本帖最后由 ShiyuWang781 于 2025-4-23 19:33 编辑
万里云 发表于 2025-4-23 18:37
单文件手动编译,简单的多文件工程手写Makefile。

至于复杂的多文件工程,只能捏着鼻子用CMake。CMake的 ...

我感觉find_package()不太好用,目前我的做法是要用包的时候先用xmake的包管理功能,看看能不能成功安装上,成功的话就可以让xmake自动管理,不行的话就在项目目录里面建一个文件夹单独放第三方库,然后去把源代码拿过来自己编译,之后把目录告诉xmake让它去连接。

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

9#
 楼主 Author| 发表于 Post on 2025-4-23 23:48:06 | 只看该作者 Only view this author
为什么用ninja的人这么少呢,按理说ninja比Makefile要更快更好用呀。

418

帖子

4

威望

2910

eV
积分
3408

Level 5 (御坂)

10#
发表于 Post on 2025-4-24 16:40:44 | 只看该作者 Only view this author
ShiyuWang781 发表于 2025-4-23 19:26
我感觉find_package()不太好用,目前我的做法是要用包的时候先用xmake的包管理功能,看看能不能成功安装 ...

xmake的包管理能自动编译安装吗?

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

11#
 楼主 Author| 发表于 Post on 2025-4-24 16:49:20 | 只看该作者 Only view this author
万里云 发表于 2025-4-24 16:40
xmake的包管理能自动编译安装吗?

能,但是有些包编译会出错

11

帖子

0

威望

408

eV
积分
419

Level 3 能力者

12#
发表于 Post on 2025-4-24 17:09:26 | 只看该作者 Only view this author
ninja确实快,但个人用的程序用makefile更容易上手,ninja主要还是用于编译一些linux大型适用软件

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

13#
 楼主 Author| 发表于 Post on 2025-4-24 21:14:21 | 只看该作者 Only view this author
adver 发表于 2025-4-24 17:09
ninja确实快,但个人用的程序用makefile更容易上手,ninja主要还是用于编译一些linux大型适用软件

但我认为手写Makefile是很不方便的,就算用Makefile也应该用CMake自动生成,而CMake也可以生成Ninja文件,那么Makefile的用武之地就不多了

418

帖子

4

威望

2910

eV
积分
3408

Level 5 (御坂)

14#
发表于 Post on 2025-4-26 12:42:21 | 只看该作者 Only view this author
ShiyuWang781 发表于 2025-4-24 21:14
但我认为手写Makefile是很不方便的,就算用Makefile也应该用CMake自动生成,而CMake也可以生成Ninja文件 ...

Makefile中最复杂的部分是依赖关系。Fortran程序可以写个脚本扫描源码生成依赖,C/C++程序的编译器自带这个功能。

39

帖子

0

威望

192

eV
积分
231

Level 3 能力者

15#
 楼主 Author| 发表于 Post on 2025-4-26 19:07:11 | 只看该作者 Only view this author
万里云 发表于 2025-4-26 12:42
Makefile中最复杂的部分是依赖关系。Fortran程序可以写个脚本扫描源码生成依赖,C/C++程序的编译器自带这 ...

那用Cmake不是也能自动生成吗,而且功能还更多

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 21:38 , Processed in 0.251417 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list