2010-02-05 10 views
7

Làm cách nào để biết nơi cài đặt tệp .pc của tôi? Các tệp này được đặt ở các vị trí khác nhau trên các hệ điều hành khác nhau. Mục đích là để có thể sử dụng một cái gì đó như $(INSTALL) mylib.pc $$(pkg-config --pcdir) trong mục tiêu cài đặt. Tôi nghĩ rằng pkg-config sẽ có thể cho tôi biết bằng cách nào đó, nhưng không thể tìm thấy bất cứ điều gì.pkg-config: cách nền tảng trung lập để tìm nơi cài đặt tệp .pc của tôi?

Tôi đang tìm một giải pháp "độc lập" có thể sử dụng trong Makefile đơn giản (không được yêu cầu hỗ trợ từ autotools hoặc tương tự).

+2

Nếu bạn cài đặt một tập tin * .pc, nó phải được cài đặt trong $ (DESTDIR) $ (libdir)/pkgconfig. Người dùng gói của bạn có đặc quyền và trách nhiệm thiết lập DESTDIR và libdir một cách thích hợp và nếu gói của bạn bỏ qua những gì người dùng chỉ định thì gói của bạn bị hỏng. –

Trả lời

5

UPDATE: Rõ ràng hiện nay là một cách để làm điều này:

pkg-config --variable pc_path pkg-config 

Tìm thấy trong bug report này (xem bình luận # 4). Trang người dùng hiện tại xuất hiện để ghi lại tài liệu này.

Original câu trả lời:

giải pháp hackish Horrible (giả vỏ bourne):

pkg-config --debug 2>&1 |grep Scanning | sed -e 's/Scanning directory //' -e "s/'//g" 

này có thể cung cấp cho bạn nhiều hơn một địa điểm.

chỉnh sửa bởi ai đó @just

ngắn hơn phiên bản

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /s///p' 

và dừng lại sau khi thư mục đầu tiên:

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /{s///p;q;}' 
+2

harry potter xuất hiện!;) –

+0

@just somebody: Congrats! Rất tốt đẹp (nhưng hacky, nhưng như vậy là giải pháp của tôi :-P) cách tiếp cận để sử dụng thông báo gỡ lỗi. :-P –

+0

- Sử dụng autoconf để kiểm tra tính năng di động - kiểm tra. - Sử dụng automake để xây dựng di động - kiểm tra. - Sử dụng libtool để trừu tượng hóa các đặc tính của việc xử lý thư viện chia sẻ - kiểm tra. - Sử dụng pkg-config để khám phá một cách có khả năng biên dịch cờ - kiểm tra. - ... - Dựa vào chi tiết triển khai không có giấy tờ của pkg-config có thể có hoặc không có ở đó, đánh bại toàn bộ cuộc đấu tranh cho tính di động - kiểm tra. -1. Vẫn đang tìm kiếm một cách di động và không điên để làm điều này – fstd

1

Thật không may, cho một cài đặt chứng khoán pkg-config (đối với phiên bản 0,23), không có cách nào để trích xuất các "con đường pc" mặc định, ngắn chạy strings trên nhị phân (ví dụ, strings /usr/bin/pkg-config | grep '/usr/.*/pkgconfig').

Nếu bạn có thể cài đặt bản dựng tùy chỉnh, chỉ cần vá nó để ghi giá trị PKG_CONFIG_PC_PATH khi chạy bằng tùy chọn thích hợp.

Một tùy chọn khác, có thể sẽ không giúp bạn (nhưng tôi vẫn đề cập đến sự hoàn chỉnh), là đặt biến môi trường PKG_CONFIG_PATH khi gọi pkg-config.

+0

"không thể": đó cũng là kết luận của tôi. không phải là một câu trả lời tôi muốn được quá hạnh phúc với, nhưng trừ khi harry potter xuất hiện, tôi sẽ chấp nhận điều này. –

3

nó nên đi vào $ {libdir}/pkgconfig (tức là $ {prefix}/lib/pkgconfig)

b về mặt lý thuyết nếu bạn cài đặt thư viện và chúng đi vào $ {libdir} thì tệp .pc của bạn phải ở $ {libdir}/pkgconfig và không có nơi nào khác.

+0

nó sẽ được tốt đẹp nếu thế giới thực là đơn giản này, nhưng vì lý do gì, FreeBSD đặt pkgconfig tập tin trong $ {tiền tố}/libdata/pkgconfig. nó ngu ngốc, nhưng nó ở đó. –

+0

trong trường hợp đó nhìn vào những thứ như glib nào – Spudd86

+1

FreeBSD chắc chắn là theo mô hình; họ đã đặt libdir = $ {prefix}/libdata –