g++生成的.d文件中':|'的含义?与':'有何区别?
GNU Make中
:|的含义及与普通:的区别 你碰到的:|是GNU Make里**仅顺序依赖(order-only prerequisites)**的紧凑写法,和下面这种分开写的格式完全等价:
"/home/test/file27.gcm": | /home/test/file27.o
核心区别对比:
- 普通
:(常规依赖):只要依赖文件比目标新,或者目标压根不存在,Make就会执行目标的重建规则。 :|(仅顺序依赖):只有当目标不存在的时候,才会去检查依赖是否需要构建;要是目标已经存在,哪怕依赖文件后来被修改更新,Make也不会重新生成目标。
结合你的场景说明:
.gcm是GCC编译C20模块时生成的模块编译单元文件。g生成这条.d依赖规则的逻辑很明确:
当file27.gcm还没生成时,必须先把file27.o编译好(保证构建顺序不出错);但一旦file27.gcm生成完成,后续file27.o的改动不会触发file27.gcm的重建——因为模块文件的生成通常只依赖原始的模块源文件,和编译后的.o文件无关,这里的依赖只是为了确保构建流程的先后顺序,而非触发更新。
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

