如何在makefile中创建命名软链接?

时间:2018-04-14 15:04:23

标签: gcc makefile gnu

我正在探索改进代码模块集成的方法,并且已经开始对使用命名软链接而不是包含目录感兴趣,主要是因为这允许集成商将任何导入模块的目录名设置为保证不会与之冲突的内容构建的模块或其任何导入的模块,以及保持导入的模块不会意外地相互拦截。但是我不确定如何在makefile中实现这一点。

以下是目录层次结构和预期链接:

+---proj1
|   +---inc
|   |       head.h
|   |
|   \---src
|           code.c
|
+---proj2
|   +---inc
|   |       head.h
|   |
|   \---src
|           code.c
|
\---proj3
    |   Makefile
    |
    \---src
        |   code.c        
        |   head.h
        |
        +---A                  --> ../../proj1/inc
        |       head.h
        |
        \---B                  --> ../../proj2/inc
                head.h

在proj3 / src / code.c中我会:

#include "head.h"
#include "A/head.h"
#include "B/head.h"

我认为在编译源代码之前,我需要一些方法为每个{directory,name}元组运行ln -s,将链接放在与正在编译的源相同的目录中。解析INC=dir1 dir2很简单,但如何在这样的列表中为每对/元组表示并运行ln -s?或者,如果在每个元素(ln -s dir1 localname)中有一个完整的命令,如何执行所有这些命令?

其他建议将深表感谢。

1 个答案:

答案 0 :(得分:0)

这样的东西?

linkdirs := A B
dir_A := ../proj1/src
dir_B := ../proj2/src

.PHONY: all symlinks
all: symlinks hello
symlinks:
    $(eval $(patsubst %,ln -fs $$(dir_%) % &&,$(linkdirs)) true