2010-01-05 30 views
10

Tôi đang phân phối các tệp cpp của tôi cùng với một tệp makefile. Bây giờ makefile nằm trong cùng thư mục với tệp cpp.Nhận Danh mục MakeFile

Biến (nếu có) trong makefile cho phép tôi truy xuất thư mục hiện tại nơi đặt makefile ở đâu? Bằng cách này tôi có thể sử dụng biến đó để xác định đường dẫn cpp của tôi để biên dịch.

makefile của tôi là như sau:

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

Chỉnh sửa: Tôi đang chạy makefiles của tôi trên Windows

+1

các "vị trí" của một tập tin là một khái niệm kỳ lạ. Hãy nhớ rằng một tệp nhất định có thể có nhiều tên (liên kết cứng, ngay cả trong cửa sổ). Ngoài ra, bạn đang trộn lẫn trong một khái niệm khác; thư mục "hiện tại" thường có nghĩa là một cái gì đó đặc biệt và không liên quan đến bất kỳ tệp riêng lẻ nào. –

Trả lời

7

Tôi nhớ mình đã gặp vấn đề tương tự. Nó không thể, theo như tôi nhớ. Đặt cược tốt nhất bạn có thể có là chuyển nó thành một biến. Đó là cả hai nền tảng chéo và đảm bảo để làm việc, như bạn biết dir makefile tại thời gian gọi (nếu không bạn không thể gọi nó). Thay vào đó, bạn có thể làm một thủ thuật rất bẩn, có nghĩa là bạn cố gắng kết hợp đường dẫn hiện tại của bạn (bạn có thể có được $ (CURDIR) trong gnu make) với đường dẫn của lệnh gọi makefile (có thể phức tạp hơn). , và phụ thuộc vào làm của bạn)

0

bạn có thể sử dụng $ (srcdir)

sau đó ./configure --srcdir = "/ your/path/to/the/source/directory"

+0

Điều này giả định Graviton đang sử dụng Autoconf, vốn không nhất thiết phải là một giả định tốt. –

1

Đối với 'Cygwin' và sử dụng 'linux' tôi đã giải quyết điều này bằng cách gọi pwd trực tiếp từ các quy tắc trong makefile:

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

Thư mục làm việc hiện tại không giống với thư mục makefile. (Làm một "cd/fnord; make -f/foo/bar/Makefile" trong đầu của bạn và bạn sẽ nhận ra vấn đề) –

Các vấn đề liên quan