You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile中使用install命令保持头文件目录结构不变?

解决Makefile头文件迁移保留目录结构的问题

你的问题出在install命令的用法上:直接批量复制文件时,它只会把所有文件放到指定的目标目录,不会自动创建源文件的相对子目录结构。可以通过循环处理每个头文件并使用install -D选项来解决。

修改后的Makefile代码:

THIS_DIR  := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
all: install_header
HEADERS =  \
    ps_evset.h \
    list/list_utils.h \
    list/list_traverse.h \
    list/list_struct.h 

install_header:
    @for header in $(HEADERS); do \
        install -D $$header $(THIS_DIR)/../build/include/evsets/$$header; \
    done

关键说明:

  • -D 是install命令的核心选项,它会自动创建目标文件路径所需的所有父目录(比如这里的list子目录),然后将源文件复制到对应的目标位置。
  • 循环遍历每个头文件,确保每个文件都按照原有的相对路径被放置到目标目录下,最终会生成你需要的结构:
    evsets/
    ├── list
    │   ├── list_struct.h
    │   ├── list_traverse.h
    │   └── list_utils.h
    └── ps_evset.h
    
  • 加上@符号可以避免循环中的命令被打印到终端,让输出更干净。

另外,如果你习惯用cp命令,也可以用cp --parents实现相同效果,但install命令会自动设置文件的权限(默认是755/644),更符合安装文件的规范:

install_header:
    mkdir -p $(THIS_DIR)/../build/include/evsets
    cp --parents $(HEADERS) $(THIS_DIR)/../build/include/evsets/

内容的提问来源于stack exchange,提问作者Gerrie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:05:31