“我如何替换?”/home/name/../quot;在makefiles中,这样我就可以把我的程序交给其他人了?

“我如何替换?”/home/name/../quot;在makefiles中,这样我就可以把我的程序交给其他人了?,makefile,directory-structure,Makefile,Directory Structure,我制作了一个C/C++makefile项目,现在需要与我的项目组中的其他人共享。 它可以通过USB或邮件等方式交给我,这对我来说并不重要 我的问题是,我在makefile(“/home/name/../project/../src/etc.”)中使用了完全写入的路径来连接项目中的库和src文件 现在我想知道,是否有可能将完全写入的路径更改为其他路径,这样其他人就不必更改完全写入的路径 如果您对我能做什么有任何建议,那将非常有帮助。您可以使用环境变量,例如${HOME}来替换/HOME/name以

我制作了一个C/C++makefile项目,现在需要与我的项目组中的其他人共享。 它可以通过USB或邮件等方式交给我,这对我来说并不重要

我的问题是,我在makefile(“/home/name/../project/../src/etc.”)中使用了完全写入的路径来连接项目中的库和src文件

现在我想知道,是否有可能将完全写入的路径更改为其他路径,这样其他人就不必更改完全写入的路径


如果您对我能做什么有任何建议,那将非常有帮助。

您可以使用环境变量,例如
${HOME}
来替换
/HOME/name
以及与环境相关的任何内容

至于完整编写的路径的其余部分,要么使用相同Makefile的用户必须具有某种类似的体系结构,要么您必须将参数传递给您的规则

例如,您可以执行
make ARGS=“path”all
,其中path是一个自定义路径,然后使用
${ARGS}
,这将相当于Makefile中
all:
规则中的
path

但正如所说,最佳实践是使用相对路径

在这种情况下,可以在项目的根目录下下载Makefile,并在
src
目录下创建源文件,如下所示:

.
├── Makefile
└── src
    ├── file1.c
    └── file2.c
使用相对路径编译
src
中所有
.c
文件的(非常基本的)Makefile是:

CC=gcc
SRC=./src/*.c

all:
    ${CC} ${SRC}

为什么不使用相对路径呢?如果看不到
Makefile
,很难告诉您比前面的注释更多的内容。硬编码绝对路径只是一个坏主意。如果必须的话,像
$HOME
这样的变量要比指向您自己的主目录的完全绝对路径稍好一些;但是,简单地让用户将
Makefile
安装在一个对他们来说很方便的目录中,并引用相对于当前目录的文件显然是更好的选择(当然,当您在一个定义良好的标准位置(如
/usr/include
)中引用系统文件时除外)。谢谢,这就是我搜索的:)