2012-06-08 12 views

cevap

34

Çekirdek Makefile'lar örneğin http://lwn.net/Articles/21835/ için, web üzerinde çeşitli yerlerde belgelenmiştir kbuild sisteminin bir parçasıdır. İlgili alıntı burada:

--- 3.1 Goal definitions 

Hedef tanımları kbuild Makefile ana bölümü (kalp) bulunmaktadır. Bu satırlar, oluşturulacak dosyaları, herhangi bir özel derleme seçenekleri ve yinelemeli olarak girilecek alt dizinleri tanımlar.

Örnek:

en basit kbuild makefile bir satır içerir obj-y + = foo.o

Bu foo.o. adlandırılan bu dizinin bir nesne olduğunu kbuild söylemek foo.o foo.c veya foo.S. adresinden oluşturulacak.

Eğer foo.o bir modül olarak kurulacak ise, obj-m değişkeni kullanılır.

Örnek: Bu nedenle aşağıdaki model sık kullanılan obj - $ (CONFIG_FOO) + =

$ (CONFIG_FOO)

foo.o olarak değerlendirilir ya Y için (dahili) ya da (modül) m . Eğer CONFIG_FOO ne y ne de m ise, dosya nu derleyecektir.

Yani m modülü, dahili y araçları (çekirdek yapılandırma sürecinde evet açılımı) ve $ (CONFIG_FOO) Normal yapılandırma sürecinden doğru cevabı çeker anlamına gelir.

3

Sorunuz bütün bir dizin hedef olarak eklenir neden gibi görünüyor, KConfig belgelerin ilgili parçasıdır:

--- 3.6 Descending down in directories 

    A Makefile is only responsible for building objects in its own 
    directory. Files in subdirectories should be taken care of by 
    Makefiles in these subdirs. The build system will automatically 
    invoke make recursively in subdirectories, provided you let it know of 
    them. 

    To do so obj-y and obj-m are used. 
    ext2 lives in a separate directory, and the Makefile present in fs/ 
    tells kbuild to descend down using the following assignment. 

    Example: 
     #fs/Makefile 
     obj-$(CONfIG_EXT2_FS) += ext2/ 

    If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular) 
    the corresponding obj- variable will be set, and kbuild will descend 
    down in the ext2 directory. 
    Kbuild only uses this information to decide that it needs to visit 
    the directory, it is the Makefile in the subdirectory that 
    specifies what is modules and what is built-in. 

    It is good practice to use a CONFIG_ variable when assigning directory 
    names. This allows kbuild to totally skip the directory if the 
    corresponding CONFIG_ option is neither 'y' nor 'm'. 
+0

obj-y değişkeni tüm .o dosyaları ekledikten sonra, nerede aslında bunları derlemek yok "yapmak" dizinine gidin "bir şey" demiyorum ve yürütmek benzer mi? Kernel ağacındaki birçok Makefile'nin neresinde? –

4

obj-y + = şey/

Bu kbuild demektir "bir şey" dizinine gitmeli. Bu dizine geçtikten sonra, hangi nesnelerin oluşturulması gerektiğine karar vermek için Makefile'ye "bir şeyler" içinde bakar.

Bu arada