2014-12-30 12 views
5

Trong mã của tôi, tôi sử dụng một tệp tiêu đề không may có một vị trí khác trong các bản phân phối Linux khác nhau.Cách xử lý vị trí tệp tiêu đề khác nhau trên các bản phân phối Linux khác nhau?

Trong trường hợp của tôi nó là fitsio.h từ cfitsio mà nằm ở đây trong OpenSUSE 12.1:

#include <cfitsio/fitsio.h> 

và ở đây trong Arch Linux:

#include <fitsio.h> 

Tôi đoán tôi có thể sử dụng một số chỉ thị tiền xử lý để tạo công tắc. Tôi có thể sử dụng điều này để kiểm tra xem tôi có đang sử dụng Linux hay Windows, v.v. nhưng tôi không biết tôi có thể sử dụng điều gì để kiểm tra xem tôi có đang sử dụng Arch Linux hay không.

Hoặc có cách nào khác/chiến lược xử lý trường hợp này không?

+0

Tôi chưa từng làm việc trên bất kỳ dự án lớn nào, nhưng khi thực hiện các dự án với Linux + Mac/Windows, tôi luôn kết thúc với các chỉ thị tiền xử lý. – keyser

Trả lời

7

Giữ đơn giản bao gồm

#include <fitsio.h> 

Sau đó, dưới bổ sung bao gồm thư mục, đường dẫn danh sách các thư mục chứa tiêu đề này cho cả SUSE và cho Arch:

/path/to/header/cfitsio 
/path/to/header 

Thậm chí nếu trước đây là không tồn tại trên Arch, nó sẽ không dẫn đến bất kỳ vấn đề nào trong quá trình biên dịch.

+3

Vấn đề chính với phương pháp này là nó ** sẽ ** dẫn đến các vấn đề về các bản xây dựng lớn hơn. Đặc biệt, nó sẽ dẫn đến biên dịch chậm như tra cứu tập tin thất bại. Tuy nhiên, điều này thường có thể được giải quyết bằng cách thiết lập các đường dẫn trong makefile một cách có điều kiện. Ý tưởng ở đây là bạn giải quyết vấn đề một lần cho mỗi tệp makefile, ở một nơi duy nhất, thay vì trong mọi tệp nguồn. – MSalters

1

Một số thư viện có chương trình [libraryname]-config xuất ra các cờ trình biên dịch chính xác để sử dụng khi biên dịch dựa vào thư viện đó trên nền tảng hiện tại.

Ví dụ, libncurses 'ncursesw5-config --cflags --libs sản xuất này trên Arch:

-L/usr/lib -lncursesw 

và điều này trên Debian:

-I/usr/include/ncursesw 
-lncursesw -ltinfo 

#include <curses.h> trong mã C là sau đó đủ, và sẽ biên dịch một cách chính xác trong cả hai phân phối.

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