5月31日报道6月1日,成都数之联科技有限公司宣布完成C轮1.6亿元人民币融资,本轮融资由中科招商、兼固资本、鹰盟资本、福建鼎保、晟川资本、中光防雷参投。本轮融资后,数之联将不断在软件开发、硬件研发、人才引进、渠道拓展等方面发力,全面赋能行业数智化转型升级。八年五轮融资,加速布局大数据赛道数之联将继续深耕智能制造和智慧城市两大领域,坚持“数据价值发现专家”定位,不断洞悉数据价值。截止目前,数之联已五次获得资本认可,背后资方包括银杏谷资本、吉富创投、高捷资本、国中创投等多家投资机构,总融资金额超3.5亿元。投资方中科招商集团董事、联席总裁薛来栋表示:“数之联在几家备投的企业中脱颖而出,是公司强大...... Last article READ

make 识别不出 .h 头文件的修改,怎么回事?

不知道各位小伙伴是否碰到过这样的情况:

一个 .c 文件 include 另一个 .h 头文件,使用 Makefile 来构建(编译)应用程序。

第一次编译、执行,很正常!

但是此时,如果修改了 .h 头文件,再次编译时,就出现问题了:

预期的执行流程是:make 发现 .h 头文件的修改时间更新,于是重新编译包含这个头文件的所有 .c 文件。

可实际的结果却是:make 并没有识别出 .h 头文件的修改。

这是怎么回事呢?让我们一一道来。

简单的代码示例

一个头文件:hello.h

#ifndef _HELLO_
#define _HELLO_
#define  NUM    1
#endif

一个源文件:main.c

#include <stdio.h>
#include "hello.h"
int main(int argc, char *agv[])

   printf("NUM = %d ", NUM);
   return 0;

Makefile 文件:

OBJS := main.o
TARGET := main
all : $(OBJS)
gcc -o $(TARGET) $(OBJS)
%.o: %.c
gcc $< -c -o $@

现在我们来第一次执行 make,编译一下:

$ make
gcc main.c -c -o main.o
gcc -o main main.o

执行一下:

$ ./main
NUM = 1

我们现在把 hello.h 文件中的 NUM 改成 2,现在的文件修改时间是:

$ ll
total 28
-rw-rw-r-- 1 root root   58 Jun  7 20:52 hello.h
-rwxrwxr-x 1 root root 8608 Jun  7 20:51 main*
-rw-rw-r-- 1 root root  122 Jun  7 20:51 main.c
-rw-rw-r-- 1 root root 1528 Jun  7 20:51 main.o
-rw-rw-r-- 1 root root  100 Jun  7 20:51 Makefile

然后再执行 make 指令,编译一下:

$ make
gcc -o main main.o

可以看到:make 只执行了 Makefile 中的链接指令(从目标文件 main.o 到可执行文件 main),并没有执行 gcc main.c -c -o main.o 这条编译指令来重新编译目标文件。

也就说明:make 并没有识别出 hello.h 这个头文件已经被改动了,尽管它“应该”可以从文件的修改时间上发现!

为什么会这样?

我们来看一下 Makefile 中的这个规则:

%.o: %.c
gcc $< -c -o $@

目标文件 main.o,只是依赖了 main.c 文件,并没有依赖 hello.h 文件。

make 的执行规则是:只有目标文件不存在,或者依赖文件比目标文件更新的时候,才会执行编译指令。

因此,虽然 hello.h 被修改了,但是它并不是目标文件 main.o 的依赖。

make 发现:main.o 在当前目录中是已经存在的,并且它比 main.c 更新,因此不会重新编译 main.o。

所以即使 hello.h 被修改了,也不会起作用,因为 make 压根就不把 hello.h 当做 main.o 的依赖!

注意:所有的操作过程没有执行 clean 操作。

data-v-f85d0f0e>本文来自微信公众号:,作者:慕峰,原文标题:《奋斗不是靠养蛊——社会达尔文主义不能救中国》,头图来自:《摩登时代》剧照今天我才把衡水中学张锡峰同学的演讲视频看了,同时还看了复旦大学数院姜某刺死该院领导王某的一些报道。张锡峰能不能代表衡中我不知道,姜某能不能代表海外归国的教研人员我也不知道,他们都是个体。但从个体的故事,我们也可以来反思一个问题,就是国内所谓的“强迫奋斗”模式,或者叫“倒逼”机制,包括许多企业和机构在搞的“末位淘汰”制,到底对未来是好还是坏。社会达尔文主义在欧美已经消亡将近100年了,即便它后来有了各种变形,但在先发国家,个体权利意识逐渐深入人心,......Next article READ