惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
N
News | PayPal Newsroom
SecWiki News
SecWiki News
P
Privacy International News Feed
T
Troy Hunt's Blog
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
L
LINUX DO - 热门话题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Security Latest
Security Latest
AWS News Blog
AWS News Blog
S
Secure Thoughts
W
WeLiveSecurity
H
Heimdal Security Blog
T
Threat Research - Cisco Blogs
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security @ Cisco Blogs
G
GRAHAM CLULEY
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
Cisco Talos Blog
Cisco Talos Blog
雷峰网
雷峰网
Cloudbric
Cloudbric
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
Latest news
Latest news
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
H
Help Net Security
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
博客园 - 叶小钗

C

各位大佬, C 語言該怎麼練習啊 - V2EX 分享一个代码优化导致的死循环 - V2EX 人再笨还能写不出内存安全的 C? - V2EX 想念 C - V2EX C11 的 _Generic,现实当中用得多不多?(尤其是公司项目) 坑爹的 GBK:大家都应该去用 UTF-8 - V2EX 分享一个用 AI 学习 C 语言的例子 一个简单的 C 程序,但是不明白区别在哪里 我这段 C 代码可以在编译时候输出结构体的大小,你们还有什么好点子, show me the code! - V2EX 这段话是否正确?「取余这个运算,只有 Python 是对的。当初 C 这个老师教错了,那么一大票学生也就只敢跟着老师错。只有 Python 敢于站出来坚持正确答案。」 - V2EX C 中可变参数如何直接传递到 printf() - V2EX C 的内存打印实现 - V2EX 函数能否实现透传不定长度参数,最终由 printf 打印 请大佬帮忙修改一份 elf 文件里的数值 - V2EX Linux 上 C 的程序遇到个异常退出问题,局部变量大小有限制?? C 语言新手求助:如何在 vscode 中使用第三方库? - V2EX 将资源嵌入到可执行文件中并保持目录结构 - V2EX 关于 C 语言的相关问题 - V2EX 轮子更新: C/C++ 跨平台小工具库 - V2EX 为什么下列程序进行的是无符号乘法? - V2EX 用 riscv64- Linux -gnu-gcc 编译的 c 文件为啥能在 x8664 下运行? - V2EX char *s = "0123"和 char s[] = "0123"的区别 有人能完整地解释一下 int (*daytab) [13]和 int *daytab[13]吗 在 c 语言中, int a;是 declaration 还是 definition - V2EX 一个简单(奇怪)的 C 语言问题 - V2EX c 语言中打印指针的值打印的是 OS 分配的虚拟地址的值吗?要怎么知道 OS 给这个 c 程序进程分配的虚拟地址的大小呢? - V2EX gcc 是怎么找到 system 函数的定义(实现)的? - V2EX 用 C 实现轻量级表达式完成策略定制化和模板内容生成 - V2EX c 语言是如何给汉字编码的? - V2EX 还是不太理解 C 静态库和动态库? - V2EX 开源 C 库 bfdev: MPI 大数运算 - V2EX C 语言中的面向切面编程(AOP) - V2EX 网络语言污染/扭曲专业术语名词——《为什么 c 语言这么抽象?》 - V2EX C 语言函数资源开销可观测性 - V2EX C 语言用户态函数可观测性 - V2EX 在 C 中,如何正确拷贝字符串 - V2EX c 语言中自定义 section 段问题请教 - V2EX C 语言的源码过滤功能的工具 - V2EX 求助 libcurl 的 curl_easy_pause() 使用方法 - V2EX 各位有什么深入了解 C 语言的书嘛? - V2EX 不熟悉 cmake,请教一下多模块项目的 cmake 写法 - V2EX 大家有没有值得推荐的 c 语言的开源项目,用来学习或者贡献的。 - V2EX 求帮忙看一下这个 C 代码为什么会段错误! - V2EX int 型返回值所能表达的内容极限 - V2EX 刚刚突然感受到了 C 语言指针的神奇之处 - V2EX 开源 C 语言库 Melon 之模块选择性编译 - V2EX 这年头搞 c 还有前途吗 看看我的 leetcode 第 151 题目 反转字符串 - V2EX 百变开源 C 语言库日志模块 - V2EX 最好用的 C 语言 JSON 解析器 - V2EX
一个简单实用的 C 工程示例, 附简洁的 Makefile - V2EX
zhng920823 · 2024-07-08 · via C

这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。

augustheart

1

augustheart      2024 年 7 月 8 日

看了一下,分享精神可嘉,不过聊胜于无吧,用处很狭窄。
实际上照本宣科写个 makefile ,目录分好。然后一个通配符也差不多效果了,最后每次就拷贝这 makefile ,修改一下输出目标名。

w568w

2

w568w      2024 年 7 月 8 日   ❤️ 4

要我说 Makefile 这种东西早就应该扔进历史垃圾桶了。

多亏了 Autotools 家族:

1. 直到今天 C/C++ 项目的构建和编译还是充满了不在文档中的命令行参数、不知名的环境变量、随心所欲的模块管理和依赖地狱;
2. 甚至每个项目都不得不自己编写一个 INSTALL 或 BUILD 文档来专门教别人如何编译;
3. Autotools 既不通用也不思进取,直到今天依然和 GCC 、glibc 强绑定,AM 宏语法残缺不全、极难理解,并且只支持「 GNU 认为你只需要」的寥寥几门语言和功能,充满了 quirks ,和其他语言的互操作更是无解问题。说是公共构建工具,更像是一群 geeks 自己开发自娱自乐的产物;
4. Makefile 完全没有考虑不同 Shell 和 Platform 的问题,想要跨平台编译,开发者不得不自己考虑并编写几百行的 boilerplates 来适配新的构建平台(例如 Windows )。

CMake is better, and Meson is even better.

如果你需要一个命令行运行器,你应该用 just 或 ninja 。

zhng920823

3

zhng920823      2024 年 7 月 8 日

@w568w #2 所以不用 Autotools 那套东西, 直接用 Makefile, 我这个 Makefile 也可以同时用在 windows 上的 mingw

zhng920823

4

zhng920823      2024 年 7 月 8 日

@augustheart #1 这个是从我自己用的项目里抽出来的, 可以一个工程里多个可执行文件, 久而久之这个工程里的东西就越来越多越来越杂, 依赖关系越来复杂, 编译越来越慢. 因为每一个 EXE 依赖所有的 OBJ.

w568w

5

w568w      2024 年 7 月 8 日

@zhng920823 是啊,我知道可以用,我自己也不是没干过这事。后来换到 CMake 、Meson 才发现:干,这些事原来根本不用自己操心维护。Makefile 里判断平台大多是白忙活!

别人写了十几年的轮子了,兼容性自然远高于我们手写的几行 Makefile 。与其遇到一个不兼容问题修复一个,不如直接用现代化构建工具。

另外,只有第 3 个缺点和 autotools 有关啊,1 、2 、4 点 Makefile 都有。

zhng920823

6

zhng920823      2024 年 7 月 8 日

@w568w #5 一直不太喜欢 cmake 等这种"大"公司推行的东西
我觉得 xmake 非常好, @waruqi 但是 xmake 没有很广泛流行开来.

w568w

7

w568w      2024 年 7 月 8 日

@zhng920823 #6 CMake 被大公司推行的好处是能统一。另外,Meson 作为纯社区项目,其实没有被大公司裹挟吧?

我也喜欢 xmake ,还贡献过代码。xmake 的问题可能是包装得太深了,想要做一些自定义很困难,以及没有一个 CMake 级别的 behavior reference 文档。

zhng920823

8

zhng920823      2024 年 7 月 8 日

@w568w #7 我也觉得 xmake 搞的越来越强大了, 早期简单的版本就够用.
Meson/Ninja 目前看来还行.
个人而言, 还是继续坚持手写 Makefile, 我觉得这样最透彻, (或者说是和已有项目绑定太深)

ipwx

9

ipwx      2024 年 7 月 8 日   ❤️ 1

@zhng920823 我曾经也排斥用别人包了一层又一层的东西,觉得什么东西都自己写底层很舒服。

直到我毕业了,从兴趣驱动到工资驱动……

augustheart

10

augustheart      2024 年 7 月 8 日

@zhng920823 xmake 是愿景太大了,它想覆盖的每个场景都会有很多具体问题,需要各种针对修正。比如我个人的场合比较非主流,就是 msys2 那套在 win 下面编译,前后就提了好些 issue 。(其实最严重的问题是文档失修)
至于 makefile ,没必要坚持,早改早好。makefile 所代表的那点知识没啥好透彻的。

GeruzoniAnsasu

14

GeruzoniAnsasu      2024 年 7 月 8 日

@zhng920823

10 个 lib source, 10 个单测 source

我需要写 _ 个 makefile, 每个 makefile 里复制粘贴 _ 行 source

新增 1 个 lib source 的时候 我需要修改 _ 个文件中的 _ 行?

zhng920823

15

zhng920823      2024 年 7 月 8 日

@GeruzoniAnsasu #14
10 个 lib source, 10 个单测 source
我需要写 1 个 makefile, 每个 makefile 里复制粘贴 20 行 source
新增 1 个 lib source 的时候 我需要修改 1 个文件中的 1 行

不过我还有一套和 IDE 结合的工具, 能把这些工作自动化. 这个 Makefile 是单独提取出来展示给大家的.

cnbatch

16

cnbatch      2024 年 7 月 8 日

虽然我也不那么喜欢 cmake ,但更不喜欢 GNU Makefile ,因为我需要兼顾 BSD 系统( BSD Makefile 稍有不同),所以最后还是要用 cmake 兜底

proxytoworld

17

proxytoworld      2024 年 7 月 8 日

我用 xmake 尝试引入 cmake ,但编译错误,搞了半天,太难了,最后还是用了 cmake 的 hunter

424778940

18

424778940      2024 年 7 月 8 日

makefile 早就该被淘汰了, 又是写他都不如写个 shell 脚本方便, 或者说这东西就是个特别一点的 shell 脚本
makefile, 尤其是 autotools 沾边的, 语法奇怪, 文档残废, 每次改点啥都要进去看代码, 因为变量名和选项都没有标准

我现在一律使用 cmake, 虽说也没有特别先进, 有些地方还是有"无法指定这个操作到底 config 还是 build 时候执行"的问题, 但配合任何 shell 脚本基本都能解决 90%以上的场景需求了

楼主你这个 makefile, 用 cmake 应该不到一半的行数就能写完

zhng920823

19

zhng920823      2024 年 7 月 8 日

@proxytoworld #17 可惜 xmake 不能直接支持 cmake

@424778940 #18 Makefile 肯定比 shell 方便的, 这点不用质疑, 毕竟是专门干这个的.
所以我说 Makefile\可以单独使用, 不碰 autotools 那些东西可以做到很简单的.

augustheart

20

augustheart      2024 年 7 月 8 日

@proxytoworld 通过 xmake 调用 cmake ,其实只是把传给 cmake 的参数给复制过去就好了,xmake 使用 package.tools.cmake ,等价于通过命令行调用 cmake 。需要注意的只有环境问题( xmake 的执行环境和 cmake 的执行环境并不一定是一样的)。

augustheart

22

augustheart      2024 年 7 月 8 日

@zhng920823 哦,那是自然的。想替代 cmake 就得解析 cmake 那一大坨东西,这个工作量比 xmake 本身还大
我个人觉得 xmake 现在这个状态已经很合我用了,写个东西各种不同编译方式的库能在同一个方案下面集成到一起,挺方便。

zhng920823

23

zhng920823      2024 年 7 月 8 日

@augustheart #22 也没必要支持 cmake 的全部特性, 一些项目的 CMakelists.txt 看着非常简单的, 只要能支持这种的编译就行.

那些导出各种工程的功能很少用的

yolee599

24

yolee599      2024 年 7 月 9 日 via Android

我用的 cmake ,就因为 cmake 大家都用,生态比较好,比如 esp-idf ,lvgl ,mbedtls ,lwip …… 都在用

hitmanx

26

hitmanx      2024 年 7 月 9 日

我工作中遇到的项目 cmake 通常都是比较复杂的,各种 custom command 、custom target 乱飞,调用各种工具、python 等等生成中间文件,再由中间文件生成其它的中间文件等等,再加上 cmake 的字符串操作、对文件系统的操作,以及各种平台*feature list 的排列组合等等……需要理解大量业务逻辑才能明白这个工作流程。

相比之下,新增文件时要更新一个文件列表,或者指定一个库的依赖等等,反而是其中最简单的环节,并不需要费太多的脑细胞。

在这种复杂的系统里,用的 build 的语言是否足够“expressive”,让读的人能轻易明白你想干什么变得更关键了。另外就是效率,现在每改一行 cmake ,重新 config 一次要好几分钟……

zhng920823

27

zhng920823      2024 年 7 月 9 日

@hitmanx #26 一般太复杂的东西, 我会选择用 shell 或其它语言的脚本进行额外处理, 而不是融合进 build 系统里面.