2010-01-05 9 views
10

Я распространяю свои файлы cpp вместе с make-файлом. Теперь make-файл находится в том же каталоге, что и файл cpp.Получить каталог MakeFile

Какова переменная (если она есть) в make-файле, которая позволяет мне получить текущий каталог, в котором находится файл makefile? Таким образом, я могу использовать эту переменную для указания моего пути cpp для компиляции.

Мой Makefile выглядит следующим образом:

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

Edit: Я бегу мои мейкфайлы на Windows,

+1

«местоположение» файла является странная концепция. Помните, что данный файл может иметь много имен (жесткие ссылки, даже в окнах). Кроме того, вы смешиваете другую концепцию; «текущий» каталог обычно означает что-то особенное и не связан ни с одним отдельным файлом. –

ответ

7

Помню, у меня была такая же проблема. Насколько я помню, это невозможно. Лучшая ставка, которую вы можете получить, - передать ее как переменную. Это как кроссплатформенная платформа, так и гарантированная работа, так как вы знаете, как сделать make-файл во время вызова (иначе вы не можете его вызывать).

В альтернативе вы можете сделать очень грязный трюк, что означает, что вы пытаетесь объединить свой текущий путь (вы можете получить с помощью $ (CURDIR) в gnu make) с помощью пути вызова make-файла (что может быть сложно и зависит от марки)

0

вы можете использовать $ (SRCDIR)

затем ./configure --srcdir = "/ your/path/to/the/source/directory"

+0

Это предполагает, что Graviton использует Autoconf, что не обязательно является хорошим предположением. –

1

Для «Cygwin» и использование «Linux» Я решает эту проблему, вызвав PWD непосредственно из правила в Makefile:

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

Текущий рабочий каталог - это не то же самое, что в каталоге, в котором находится makefile (сделайте «cd/fnord; make -f/foo/bar/Makefile» в своей голове, и вы поймете проблему) –

Смежные вопросы