2011-05-03 14 views
13
içine yükleme yollarını nasıl alınır Programım programım bu klasör nerede olduğunu bilmek gerekiyor gibi ./configure --datadir=/somewhere

Autoconf: config.h

verilen her klasör içine kurulacak çalışma zamanında bazı dosyaları yüklemek gerekiyor

çalışma zamanında, C kodu bir dizge olarak yola erişebilsin diye bir sembolü sembol olarak tanımlamalıyım.

Şu anda derleyici bayrakları değiştirerek yapıyorum

: zaman script zaten içinde başka şeyler bir grup ile config.h dosyasını üretir olarak

AM_CPPFLAGS = -DDATA_PATH=\"$(pkgdatadir)\" 

Ancak, sembol istiyorum bunun yerine orada görünür.

Bu mümkün mü?

cevap

4
AC_DEFINE_UNQUOTED([DATA_PATH], ["$pkgdatadir"]) 

Derleyici bayraklarını değiştirmeye rağmen, aslında bunu yapmak için daha normal bir yoldur.

+0

Teşekkür! Bunu 'olağan' şekilde yapmanın bir yararı var mı? Ben standarda uymak için hepim ama daha karışık görünüyordu. – Malvineous

+0

Avantajı, './configure CPPFLAGS = -DDATA_PATH =/yol/to/alternate/data 'yapılarak yapılandırma zamanında CPPFLAGS'yi geçersiz kılabilirsiniz; config.h ile yapabilmek için, çeşitli dizinlerinizin nerede olduğuna dair daha az kontrol sağlayan './configure --prefix =/alternate/prefix' gerektirir. – ptomato

6

Çözümünüz doğru olanıdır. Autoconf/Automake'nin kurulum yollarını config.h'a eklememesinin (kolayca) desteklememesinin nedeni, teorik olarak, make prefix=/else/where gibi yapım süresindeki yolları geçersiz kılmasıdır. Bu olasılık günümüzde biraz arıcandır, ama sebebi budur. (Bunun DESTDIR olmasına rağmen hala yararlı olan make install prefix=/else/where/'dan farklı olduğunu unutmayın.)

6

Yapmanızın tercih edilen yolu cevabınızdır. Autoconf el kitabında "make install" (yükleme işlemi) zamanındaki çeşitli değişkenlerin nasıl geçersiz kılınacağı açıklanmaktadır (örneğin, ambalaj için çok kullanışlıdır).

A corollary is that you should not use these variables except in 
makefiles. For instance, instead of trying to evaluate `datadir' in 
`configure' and hard-coding it in makefiles using e.g., 
`AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])', you 
should add `-DDATADIR='$(datadir)'' to your makefile's definition of 
`CPPFLAGS' (`AM_CPPFLAGS' if you are also using Automake). 

Autotools ve genel olarak sistemleri inşa karmaşık bir iş ve kimse henüz şeyler yapmanın güzel ve temiz yollarını bulmasını etti: Bunu yaparken (Kurulum Dizini Değişkenler" bölümünde) diyor yeterince genel, yani bunun gibi bölümleri okumak ve tam olarak çalışmak zorunda olduğumuz anlamına gelir.Herhangi bir durumda sezgileriniz doğruydu!

1

Sizin için bilinmesi gereken bir dizi yolunuz olması durumunda kaynak kodu ve derlemelerinizde aşırı gürültüyü önlemek istiyorsanız (ör. -DPATH1 =/path/to/something -DPATH2 =/path2/to/something2 -DPATH3 =/path3/to/something3 ... ad infinitum) Bazı insanlar için arzu edilen alternatif örneğin hatlar

#define PATH1 "@[email protected]" 
#define PATH2 "@[email protected]" 
#define PATH3 "@[email protected]" 

ile, yeni bir "mynewheader.h.in" oluşturmak ve configure.ac en AC_CONFIG_FILES hattına ekleyin:

AC_CONFIG_FILES([Makefile mynewheader.h]) 
İlgili konular