2014-04-08 15 views
5

Khi tôi tạo cơ sở dữ liệu cscope hạt nhân Linux bằng cách phát hành make cscope tôi nhận tệp cơ sở dữ liệu cùng với danh sách tệp có đường dẫn tương đối. Đây là một vấn đề đối với tôi vì sau này khi tôi đính kèm cơ sở dữ liệu của hạt nhân bên ngoài vào trình soạn thảo vim từ bất kỳ thư mục nào nhưng hạt nhân tôi có thể dễ dàng tìm kiếm biểu tượng cụ thể NHƯNG Tôi không thể mở tập tin đó có chứa mã vạch.Linux kernel makefile cscope target

tôi đã viết kịch bản bash tiếp theo

#!/bin/bash 

SNAME="$0" 
SNAME=${SNAME##*/} 

function usage() 
{ 
    echo Generate Linux kernel cscope database 
    echo "Usage: $SNAME [PATH]" 
    echo -n "You must provide this script with an ABSOLUTE path of your " 
    echo "kernel's root directory" 
} 

if [[ -z "$1" ]]; then 
    usage 
    exit -1 
fi 

KDIR="$1" 

echo -n "Collecting a list of files... " 
if find "$KDIR" -path "${KDIR}/arch/*" ! -path "${KDIR}/arch/x86*" -prune -o \ 
     -path "${KDIR}/include/asm-*" \ 
     ! -path "${KDIR}/include/asm-generic*" \ 
     ! -path "${KDIR}/include/asm-x86*" -prune -o \ 
     -path "${KDIR}/tmp*" -prune -o \ 
     -path "${KDIR}/Documentation*" -prune -o \ 
     -path "${KDIR}/scripts*" -prune -o \ 
     -name "*.[chxsS]" -print > cscope.files; then 
    echo done 
else 
    echo failed 
fi 

echo -n "Building cscope database... " 
cscope -k -qb && echo done || echo failed 

thu thập tất cả các file tôi cần (x86/x86_64 kiến ​​trúc) sử dụng tuyệt đối con đường và sau đó tôi xây dựng thành công cơ sở dữ liệu cscope bằng tay. Nhưng tôi nghĩ rằng nó phải là một cách dễ dàng hơn để thực hiện điều này. Có thể một số mục tiêu của Makefile như make cscope_abs hoặc make cscope_ext mà tôi chưa tìm thấy.

Mọi đề xuất?

+0

+1 không biết nó có một tùy chọn cscope. –

+1

Một điều mà tôi nghĩ đến là: nhìn vào Makefile cách cscope được gọi, nếu tồn tại một biến bạn có thể chỉ định một số tùy chọn để cscope trong dòng lệnh. – Chnossos

Trả lời

2

Từ cscope manpage here:

-P đường Thêm vào trước đường dẫn đến tên tập tin tương đối trong một pre-xây dựng tập tin tham chiếu chéo, do đó bạn không cần phải thay đổi tới thư mục chứa các tệp tham chiếu chéo đã được tạo. Tùy chọn này chỉ hợp lệ với tùy chọn -d .

Vì vậy, tôi đoán lệnh sau từ thư mục kernel cấp cao nhất nên làm các trick (xin lỗi không có máy linux tiện dụng):

cscope -d -P `pwd` 

2 cent của tôi,

1
make cscope 

hoặc cho trường hợp cụ thể của bạn -

ARCH=x86 make cscope 
3

Đầu tiên, nó đơn giản hơn o tạo ra một cơ sở dữ liệu cscope cụ thể cho một kiến ​​trúc đặc biệt như sau: Trong thư mục trên Linux kernel của, chạy

ARCH=x86 make cscope 

này tạo ra một cscope với tương đường dẫn. Bây giờ bạn có thể yêu cầu vim để giải thích các đường dẫn tương đối đến vị trí của tập tin cscope.out theo một trong hai cách sau:

Cách 1: Sử dụngcscoperelative. Sản lượng :help csre:

If 'cscoperelative' is set, then in absence of a prefix given to cscope 
(prefix is the argument of -P option of cscope), basename of cscope.out 
location (usually the project root directory) will be used as the prefix 
to construct an absolute path. The default is off. Note: This option is 
only effective when cscope (cscopeprg) is initialized without a prefix 
path (-P). Examples: > 
    :set csre 
    :set nocsre 

Way 2: (Từ Aaron Hs' câu trả lời trong this câu hỏi) Khi thêm cơ sở dữ liệu cscope trong vim, xác định địa điểm cơ sở.Ví dụ:

:cs add <base_location>/cscope.out <base_location>/ 

Từ trang trợ giúp vim cho cscope add:

USAGE :cs add {file|dir} [pre-path] [flags] 

    [pre-path] is the pathname used with the -P command to cscope. 
0

Bạn có thể sử dụng lệnh sau đây trong thư mục gốc của cây hạt nhân để tạo ra đường dẫn tuyệt đối:

#> make O=. cscope 
Các vấn đề liên quan