2010-10-19 40 views
17

Tôi đã biên dịch thành công và cài đặt phiên bản mới nhất của thư viện Boost lên máy linux của mình. Bây giờ, tôi muốn có thể sử dụng pkg-config để giảm bớt quá trình cung cấp các liên kết paremeters với GCC.Làm thế nào để sử dụng thư viện C++ Boost với pkg-config?

Vì tôi quá lười biếng để mã hóa bằng tay tệp .pc của riêng mình, có một tập lệnh/công cụ nào sẽ tự động tạo tệp .pc cần thiết hoặc theo cách khác cập nhật pkg-config với cờ tăng không?

(Nếu ai đó đã có tập tin đó .pc, một phần sẽ được hoan nghênh là tốt.)

Trả lời

8

gì bạn đang tìm kiếm có vẻ là một chút phức tạp, và một tính năng dài yêu cầu, như đã nêu trong bài đăng cũ này 3 năm https://svn.boost.org/trac/boost/ticket/1094 trên Boost trac. Đọc qua nó cho thấy rằng tính năng này đã bị trì hoãn nhiều lần và không bao giờ được triển khai (tính đến 1.4.3). Nguyên nhân của việc không thể tạo tệp .pc có thể sử dụng được bởi pkg-config xảy ra để làm với sự không thống nhất của boost trong việc đặt tên cho các phiên bản thư viện/các biến thể xây dựng của chúng.

FWIW, một thay thế cho "tự động hóa" quy trình xây dựng của bạn là sử dụng các autotools (autoconf/automake). Có một liên kết có thể được sử dụng cho bạn (mà tôi không thể đăng vì SO nghĩ rằng tôi là người gửi spam thay vì người mới!), Chỉ cần google "tsuna boost m4 github" và nó sẽ đưa bạn đến đó :)

5

Đang đối mặt với một vấn đề tương tự với tăng cường. Đã viết kịch bản python đơn giản để tạo tệp .pc. Đã lưu cho tôi nỗi đau khi viết tất cả các lệnh liên kết. Tôi đã đăng nó trên https://github.com/nmante/pkg-config-generator.

Về cơ bản, bạn cung cấp cho tập lệnh thư mục chứa tệp (.so, .a, .dylib) và nó sẽ tạo các lệnh trình liên kết (ví dụ: -lboost_graph). Vui lòng tinh chỉnh và nĩa theo nhu cầu của bạn.

Đây là tệp boost.pc mẫu tôi đã tạo cho máy của mình (Mac OS X). Bạn có thể tinh chỉnh thủ công hoặc bạn có thể sử dụng github program để tạo trên máy của mình.

# Package Information for pkg-config 

prefix=/usr/local/Cellar/boost/1.60.0_2 
exec_prefix=${prefix} 
libdir=${exec_prefix}/lib 
includedir_old=${prefix}/include/boost 
includedir_new=${prefix}/include 

Name: Boost 
Description: Boost is awesome 
Version: 1.60.0 
Libs: -L${exec_prefix}/lib -lboost_prg_exec_monitor-mt 
-lboost_math_c99f-mt -lboost_unit_test_framework-mt 
-lboost_container-mt -lboost_log_setup -lboost_math_tr1l 
-lboost_graph-mt -lboost_wserialization-mt -lboost_log-mt 
-lboost_math_c99f -lboost_type_erasure -lboost_signals-mt 
-lboost_test_exec_monitor -lboost_filesystem -lboost_thread-mt 
-lboost_math_tr1f-mt -lboost_date_time -lboost_timer 
-lboost_math_tr1f -lboost_test_exec_monitor-mt -lboost_container 
-lboost_math_tr1 -lboost_type_erasure-mt 
-lboost_program_options-mt -lboost_graph -lboost_log_setup-mt 
-lboost_random -lboost_system -lboost_system-mt -lboost_locale-mt 
-lboost_wserialization -lboost_regex -lboost_exception 
-lboost_timer-mt -lboost_signals -lboost_filesystem-mt 
-lboost_math_c99-mt -lboost_math_tr1-mt -lboost_serialization-mt 
-lboost_serialization -lboost_prg_exec_monitor -lboost_exception-mt 
-lboost_coroutine -lboost_math_c99 -lboost_iostreams-mt 
-lboost_random-mt -lboost_program_options -lboost_atomic-mt 
-lboost_date_time-mt -lboost_math_c99l -lboost_math_tr1l-mt 
-lboost_context-mt -lboost_regex-mt -lboost_coroutine-mt 
-lboost_log -lboost_chrono-mt -lboost_wave-mt 
-lboost_iostreams -lboost_chrono -lboost_unit_test_framework 
-lboost_math_c99l-mt 
Cflags: -I${includedir_old} -I${includedir_new} 
Các vấn đề liên quan