在makefile中进行硬链接

阿波罗

我很难弄清楚如何为目标程序创建两个硬链接。我的目标程序是foo,我想创建两个指向foo的硬链接,一个称为baz,另一个称为bar目前,我的makefile如下所示:

CC = gcc
CFLAGS = -g -std=c99 -pedantic -Wall
HOME = /my/home/dir
SOURCES = main.c bar.c baz.c datastructure.c ${HOME}/addNodes.c
OBJECTS = $(SOURCES:.c=.o)
TARGET = foo
LN_F = ln -f

$(TARGET): $(OBJECTS)
    ${CC} ${CFLAGS} -o $@ $^

%.o : %.c
    $(CC) $(CFLAGS) -c $< -o $@

bar: ${TARGET}
    ${LN_F} ${TARGET} bar

baz: ${TARGET}
    ${LN_F} ${TARGET} baz

问题是,我现在必须通过输入"ln -s foo bar"手动创建到foo的硬链接。"ln -s foo baz"

乔纳森·勒夫勒(Jonathan Leffler)

如果您使用符号链接:

TARGET = foo
AUX1   = bar
AUX2   = baz
LN_S   = ln -s -f

all: ${TARGET} ${AUX1} ${AUX2}

${TARGET}: $(OBJECTS)                                                           
    ${CC} ${CFLAGS} -o $@ $^                                                    

${AUX1}: ${TARGET}
    ${LN_S} ${TARGET} ${AUX1}

${AUX2}: ${TARGET}
    ${LN_S} ${TARGET} ${AUX2}

如果您使用硬链接,则将使用ln -f(不带-s)。需要注意的是从前一个(非常)很久以前,在-f不被支持ln(在那些日子里,-s是不是一种选择,要么-我说的是很久以前),像这些链接规则的规则会使用rm -f到在运行ln命令之前,请删除链接

您还可以使用通用宏$@$?(这些是可靠的,受POSIX支持的宏)编写链接线

${AUX2}: ${TARGET}
    ${LN_S} $? $@

之所以有效,是因为只有一个先决条件${AUX2}; 如果存在多个先决条件,$?则将无法正常工作-请当心。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Makefile中进行链接时遇到问题

在Vim中进行硬刷新(不是:so%)

从Makefile中进行Git提交

遵循最佳实践避免在Apex中进行硬编码

需要更改硬代码并在此查询中进行过滤

包括要在Makefile本身中进行的参数

在C#中进行静态链接?

推迟在Android中进行深层链接

如何在php中进行链接共享

如何使用lstat()确定是否进行硬链接

在Visual C ++ Makefile项目配置中进行测试发现

如何捕获错误标志并继续在makefile中进行编译

如何在基于平台的Makefile中进行if语句?

在vim中进行硬线换行而不在插入模式下加入

如何在Jenkins中使用配置信息而不是在Jenkinsfile中进行硬编码?

避免在具有多个条件的If语句中进行硬编码

获取手动设置的HttpResponseMessage Content值(在代码中进行了硬编码)

从appsettings.json获取ConnectionString,而不是在.NET Core 2.0 App中进行硬编码

如何避免在python中进行硬编码以替换短形式词和年轻词?

如何避免在python中进行硬编码以将单词替换为日期?

如果在Symfony项目中进行硬编码,是否很容易生成正确的URL?

Node.JS-filter()仅在索引中进行硬编码时有效

将Head部分存储在Coldfusion中,而无需在XSL中进行硬编码

如何在Google Colab中进行内部链接

如何在C#中进行构造函数链接

在Skype,Facebook等中进行链接时显示正确的页面名称

使用标签值在GridView中进行超链接控制

如何在没有链接行的MySQL中进行JOIN

如何在numpy中进行此操作(平铺操作的链接)?