加藤(大阪)です。 超亀レスかつ、肝心な事柄は既に解決済みのようですが。 Fri, 13 Aug 2010 01:43:38 +0900 付 0707 fukaさんのメールより引用: > ①http://corega.jp/product/os/vine215.txtの中のcorega FEtherII CB TXDの使用時のポイント4に > > # gcc -MD -c -O2 -I/usr/src/linux/pcmcia-cs-3.1.12/include \ > -D__KERNEL__ -DEXPORT_SYMTAB -DMODVERSIONS \ > -include /usr/src/linux/include/linux/modversions.h \ > -DMODULE -DCARDBUS rtl8139.c -o realtek_cb.o > とありますが、-D__KERNEL__ -DEXPORT_SYMTAB -DMODVERSIONS \-include > /usr/src/linux/include/linux/modversions.h \-DMODULE -DCARDBUS > という意味を教えて戴きたいです。 この箇所だけに反応します。 まず、それぞれの行末の '\' ですが、これは、この行がここで終わりではな く、次の行に続く事を意味します。 つまり上の例では "gcc" から "realtek_cb.o" までが一行のコマンドラインで 有る事を意味しています。なので、X-端末などに打ち込む時は、'\' は省いて、 続け様に打ち込むか、'\' の後ろで [Enter] を打ち、次の行を続けて打ち続け る事になります。(これは既にご存知かも知れませんが、一応。) 次に、'-include /usr/src/linux/include/linux/modversions.h' の部分です が、これは指定ヘッダファイル "modversions.h" をコンパイル対象に "別途" で含める事 (include)を意味します。 ("別途" と書いたのは、既にソースファイル (ここでは rtl8139.c) の中でも '#include <hoge.h>' などとして、"別途ではなく" 含めるファイルを指定して いる事があるからです) あとの '-D__KERNEL__'、'-DCARDBUS'、など頭に '-D' が付くものは、それぞれ '-D' の後ろの文字列('__KERNEL__' や 'CARDBUS' など)をソースの外で定義 ('D'efine)しています。 これらの文字列の定義は、コンパイル時にソースの中に '#ifdef __KERNEL__' や '#ifndef __KERNEL__' などという部分が見つかった時、その部分を選択的に コンパイルしたりしなかったりするように制御する(条件付きコンパイルといい ます)時に使います。 つまり、コマンドラインから '-D__KERNEL__' を "省略" した場合は、ソース内 で #ifdef __KERNEL__ ...(ソースコード) #endif と書かれてるような箇所は、'...(ソースコード)' の部分はコンパイルの対象か ら外されることになります。 (#ifndef とある時は、その逆になります。また、省略しなかった場合は、どち らも真逆に働きます) なお、これらのオプションは、順番に処理されていき、ソースやヘッダファイル 内で定義解除 (#undef) される事も有り得るので、コマンドライン内での順番は 入れ替えない方が望ましいです。 '-include' と '-D' についての詳細は、 $ man gcc などで調べる事が出来ます。 また、gcc に、'-E' オプションを付けて実行すると、コンパイル前の "前処理" だけを行った結果を出力してくれるので、 $ gcc -E source.c > pp1 $ gcc -E -include header.h -DDEBUG source.c > pp2 (※ここでのソース名、ヘッダファイル、定義文字列は仮のものです) などとした場合の、pp1 と pp2 の違いを diff コマンドなどで、 $ diff -suNr pp1 pp2 差分を取ると、実際に '-include' や '-D' を付けるのと付けない場合の違いが 確認出来ます (これはその他の前処理オプションでも応用出来ます)。 以上、蛇足レスで申し訳ないですが、この部分へのレスが無かったようなので。 -- 加藤 雅 <mkato@xxxxxxxxxxxxx> http://add10.hp.infoseek.co.jp/rox/ http://www2.odn.ne.jp/add10/fluxbox/
_______________________________________________ vine-users mailing list vine-users@xxxxxxxxxxxxxxxxxxxx http://listserv.linux.or.jp/mailman/listinfo/vine-users