← man/dev_and_programming
ctags — man ctags — 80×24
ugur@toprak:~/man/dev_and_programming$man ctags
Bölüm 1 Geliştirme & Programlama

ctags

bir etiket (tags) dosyası oluşturur

Genel Bakış

     ctags [-BFTaduwvx] [-f tagsfile] file ...

Açıklama

ctags aracı; belirtilen C, Pascal, Fortran, yacc(1), lex(1) ve Lisp kaynak dosyalarından ex(1) için bir etiket (tags) dosyası oluşturur. Bir etiket dosyası, bir grup dosya içindeki belirtilen nesnelerin konumlarını verir. Etiket dosyasının her satırı; nesne adını, tanımlandığı dosyayı ve nesne tanımı için bir arama modelini (search pattern) boşluklarla ayrılmış olarak içerir. ex(1), etiket dosyasını kullanarak bu nesne tanımlarını hızlı bir şekilde bulabilir. ctags'e sağlanan seçeneklere bağlı olarak nesneler; alt rutinler (subroutines), typedef'ler, define'lar, struct'lar, enum'lar ve union'lardan oluşabilir.

Aşağıdaki seçenekler mevcuttur:

  • -B: Geriye doğru arama modelleri (?...?) kullanır.

  • -F: İleriye doğru arama modelleri (/.../) kullanır (varsayılan).

  • -T: typedef'ler, struct'lar, union'lar ve enum'lar için etiket oluşturmaz.

  • -a: Etiket dosyasına ekleme yapar (append).

  • -d: Argüman almayan #define'lar için etiket oluşturur; argüman alan #define'lar otomatik olarak etiketlenir.

  • -f: Etiket açıklamalarını tagsfile adlı bir dosyaya yerleştirir. Varsayılan davranış, bunları tags adlı bir dosyaya yerleştirmektir. Eğer tagsfile “-” ise, etiketler bunun yerine standart çıktıya yazılır.

  • -u: Etiket dosyasındaki belirtilen dosyaları günceller; yani onlara yapılan tüm başvurular silinir ve yeni değerler dosyanın sonuna eklenir. Etiket dosyası mevcut değilse veya normal bir dosya değilse (örneğin, standart çıktıya yazmak için -f- kullanıldıysa) bu seçenek yoksayılır.

    Dikkat edin: Bu seçenek oldukça yavaş bir şekilde uygulanmıştır; genellikle etiket dosyasını sıfırdan yeniden oluşturmak daha hızlıdır.

  • -v: Standart çıktıda vgrind(1) tarafından beklenen biçimde bir dizin üretilir. Bu liste; nesne adını, dosya adını ve sayfa numarasını (64 satırlık sayfalar varsayılarak) içerir. Çıktı sözlük sırasına göre sıralanacağından, çıktının sort(1) üzerinden geçirilmesi istenebilir. Örnek kullanım:

    ctags -v files | sort -f > index vgrind -x index

  • -w: Uyarı tanılamalarını bastırır.

  • -x: ctags; nesne adlarının bir listesini, her birinin tanımlandığı satır numarasını ve dosya adını, ayrıca o satırın metnini üreterek standart çıktıya yazdırır. Bu, çevrimdışı okunabilir bir fonksiyon dizini olarak yazdırılabilecek basit bir dizindir.

Adı .c veya .h ile biten dosyaların C kaynak dosyaları olduğu varsayılır ve C tarzı rutin ve makro tanımları için aranır. Adı .y ile biten dosyaların yacc(1) kaynak dosyaları olduğu varsayılır. Adı .l ile biten dosyalar, ilk boşluk olmayan karakterleri ‘;’, ‘(’ veya ‘[’ ise Lisp dosyaları olarak kabul edilir, aksi takdirde lex(1) dosyaları olarak işlenir. Diğer dosyalar önce herhangi bir Pascal veya Fortran rutin tanımı içerip içermediklerini görmek için incelenir ve içermiyorlarsa C tarzı tanımlar için aranır.

C programlarında “main” etiketi özel olarak ele alınır. Oluşturulan etiket, dosyanın sonundaki .c ve başındaki yol adı bileşenleri kaldırılarak dosya adına ‘M’ öneki getirilerek oluşturulur. Bu, birden fazla program içeren dizinlerde ctags kullanımını pratik hale getirir.

yacc(1) ve lex(1) dosyalarının her birinin özel bir etiketi vardır. “yyparse”, yacc(1) dosyasının ikinci bölümünün başlangıcıdır ve “yylex”, lex(1) dosyasının ikinci bölümünün başlangıcıdır.

Dosyalar

tags varsayılan çıktı etiket (tags) dosyası

Çıkış Durumu

ctags aracı bir hata oluşursa 1 değeriyle, aksi takdirde 0 değeriyle çıkar. Yinelenen nesneler hata olarak kabul edilmez.

Uyumluluk

-t seçeneği, varsayılan olarak typedef'ler, enum'lar, struct'lar ve union'lar için etiket oluşturmayan ctags'in önceki sürümleriyle uyumluluk için geçersiz bir işlemdir (no-op).

Ayrıca Bakınız

ex(1), vi(1)

Standartlar

ctags aracı IEEE Std 1003.1-2001 (“POSIX.1”) standardına uygundur.

Geçmiş

ctags aracı 3.0BSD ile sunulmuştur.

Hatalar

Fortran ve Pascal için fonksiyonların, alt rutinlerin ve prosedürlerin tanınması son derece basit bir şekilde yapılır. Blok yapısını ele almak için hiçbir girişimde bulunulmaz; farklı bloklarda aynı ada sahip iki Pascal prosedürünüz varsa kaybedersiniz. ctags aracı Pascal tiplerini anlamaz.

C, Pascal veya Fortran fonksiyonlarının aranıp aranmayacağına karar verme yöntemi geçici bir çözümdür (hack).

ctags aracı girdinin düzgün biçimlendirilmiş olmasına güvenir ve herhangi bir sözdizimsel hata kafasını tamamen karıştıracaktır. Ayrıca bazı yasal sözdizimlerini de kafa karıştırıcı bulur; örneğin #ifdef'leri anlamadığı için (bu arada bu bir hata değil, bir özelliktir), #ifdef'lerin içinde dengesiz süslü parantezler içeren herhangi bir kod, aracın biraz yönünü kaybetmesine neden olacaktır. Benzer şekilde, bir tanım içindeki çoklu satır değişiklikleri, arama modeli olarak ilk satır yerine nesnenin son satırını girmesine neden olacaktır. Çok satırlı typedef'lerin son satırı da benzer şekilde kaydedilecektir.

macOS 26.4 Mayıs 2023 macOS 26.4