2010-01-05 129 views
10

我正在发布我的cpp文件以及makefile。现在,makefile与cpp文件位于同一目录中。获取MakeFile目录

makefile中的变量(如果有)允许我检索makefile所在的当前目录?通过这种方式,我可以使用该变量来指定我编译的cpp路径。

我的makefile文件如下:

all: 
    g++ ($makeFileDir)/main.cpp ($makeFileDir)/hello.cpp ($makeFileDir)/factorial.cpp -o ($makeFileDir)/hello.exe 

编辑:我正在我的makefile在Windows

+1

该文件的“位置”是一个奇怪的概念。记住一个给定的文件可以有很多名字(硬链接,甚至在窗口中)。另外,你在混合另一个概念; “当前”目录通常意味着一些特殊的东西,并且与任何单个文件无关。 – 2013-02-08 18:24:34

回答

7

我记得我有完全相同的问题。据我所知,这是不可能的。 您可以拥有的最佳选择是将其作为变量传递。这既是跨平台的,也是有保证的,因为你知道调用时的makefile目录(否则你不能调用它)。

或者,你可以做一个非常脏的诡计,这意味着你试图将你当前的路径(你可以用gnu make中的$(CURDIR)获得)与makefile的调用路径结合起来(这可能会很棘手,并取决于你的化妆)

0

可以使用$(SRCDIR)

随后的./configure --srcdir =“/ your/path/to/the/source/directory”

+0

这假设Graviton正在使用Autoconf,这不一定是一个好的假设。 – 2017-09-18 15:07:24

1

对于“cygwin的”和'Linux的使用我已经在makefile直接从规则调用PWD解决了这个:

do.%: %.cpp 
    echo "Running command in " `pwd` 
    somecommand $^ 
+0

当前工作目录与makefile所在的目录不同(在你的头部做一个“cd/fnord; make -f/foo/bar/Makefile”,你会意识到这个问题) – 2013-02-08 18:25:41