●質問
GCCに”-D”のコンパイラのコンパイラオプションがあると思います。
コマンドで、下記のようにコンパイルすると
gcc -DKOJI Helllo.c
Cソースで
#define KOJI 1
と同様の効果が得られるわけですが、#defineではなく
makefileに記載する事により、同様の効果が得られる方法は有るのでしょうか?
ご教示願いたくよろしくお願いします。
--
*
by Koji
*
> GCCに”-D”のコンパイラのコンパイラオプションがあると思います。
> コマンドで、下記のようにコンパイルすると
> gcc -DKOJI Helllo.c
> Cソースで
> #define KOJI 1
> と同様の効果が得られるわけですが、#defineではなく
> makefileに記載する事により、同様の効果が得られる方法は有るのでしょうか?
> ご教示願いたくよろしくお願いします。
CPPFLAGS=-DKOJI
--
Hiroshi Fujishima
CPPFLAGS=-DKOJI
で実現できるのが分かりましたが
他の方法はないでしょうか?
Cソース上でKOJIという文字が"1”と認識
させる方法がmakefileで実現したく思います。
可能でしょうか?
makefileの先頭で KOJI=1 と書いただけでは
駄目なようですし、、、困ってます。
以上
CPPFLAGS=-DKOJI
で実現できると分かったからもう解決済みなのではないですか?
なのに何故、makefileでKOJI=1と書いたりしているのですか?
makefileにCPPFLAGS=-DKOJIと書いて解決しているのでしょ。
これはmakefileで解決ではないのですか?
% cat makefile
CPPFLAGS=-DKOJI
...
% make
...
--
中村和志@神戸 <mailto:k...@kobe1995.net>
NAKAMURA Kazushi@KOBE <http://kobe1995.net/>
- Be Free(BSD) or Die.
そこで、ニュースグループに投稿しました。
ご教示お願いします。
"NAKAMURA Kazushi" <k...@kobe1995.net> wrote in message
news:0301190255...@ns.kobe1995.net...
CPPFLAGS=-DKOJI=1
--
Akira Kakuto
CPPFLAGS=-DKOJI -DFOO -DBAR -DBAZ ...
のように書けるのはご存じ? -Dオプションの数が100と
か200程度ならこれで問題なく動くと思いますが...。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
oh...@sdg.mdd.ricoh.co.jp
"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:b0df74$moq$1...@ns.src.ricoh.co.jp...
> fj.os.linuxの記事<b0d02r$s7j$1...@nsvn01.zaq.ne.jp>で
> caas...@hcn.zaq.ne.jpさんは書きました。
>
> CPPFLAGS=-DKOJI -DFOO -DBAR -DBAZ ...
>
> のように書けるのはご存じ? -Dオプションの数が100と
> か200程度ならこれで問題なく動くと思いますが...。
便乗質問ですいません。例えば,
#define hoge "hello"
みたいなのを,-D オプションで実現するにはどうすれば良いのでしょうか。
--
******************************
keizi kounoike
******************************
> 便乗質問ですいません。例えば,
>
> #define hoge "hello"
>
> みたいなのを,-D オプションで実現するにはどうすれば良いのでしょうか。
-Dhoge=hello
--
Hiroshi Fujishima
<koun...@mbh.nifty.com> wrote in message
news:b0dj77$svp$1...@news511.nifty.com...
> 鴻池です。
>
> "Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
> news:b0df74$moq$1...@ns.src.ricoh.co.jp...
> > fj.os.linuxの記事<b0d02r$s7j$1...@nsvn01.zaq.ne.jp>で
> > caas...@hcn.zaq.ne.jpさんは書きました。
> >
> > CPPFLAGS=-DKOJI -DFOO -DBAR -DBAZ ...
> >
> > のように書けるのはご存じ? -Dオプションの数が100と
> > か200程度ならこれで問題なく動くと思いますが...。
上記方法は知ってますが、違う方法で考えてます。
>
> 便乗質問ですいません。例えば,
>
> #define hoge "hello"
>
#define hoge "hello"だと、Cソースで記述せねばならず、Cソースの修正が必要に
思います。そうなると、ソースを触る必要があると思います。
makefileのみの書き換えでは、やはり、無理ですよね?
--
Akira Kakuto
"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:b0df74$moq$1...@ns.src.ricoh.co.jp...
> fj.os.linuxの記事<b0d02r$s7j$1...@nsvn01.zaq.ne.jp>で
> caas...@hcn.zaq.ne.jpさんは書きました。
> > CPPFLAGS=-DKOJI
> > で、マクロにしてコンパイル出来る事は既に知っていました。
> > しかし、makefileでCコンパイラのオプション”-D”の使用できる数が限られて
お
> > り、コンパイル出来ません。
>
> CPPFLAGS=-DKOJI -DFOO -DBAR -DBAZ ...
>
> のように書けるのはご存じ? -Dオプションの数が100と
> か200程度ならこれで問題なく動くと思いますが...。
> --
上記方法も知ってますが、他に方法があれば知りたく思うのですが。。。。。
-Dでは、限界があります。Cソース書き換えを行わずmakefileでの他の方法が
有れば教えてください。
数の制限も文字列の記述も問題ないとして、何が限界な
のかわかりません。もう少し詳しく書けませんか?
> Cソース書き換えを行わずmakefileでの他の方法が
> 有れば教えてください。
makefileでできることは、gccのコマンドラインオプシ
ョンを指定することだけです。やりたいことがgccの-D
オプションでは書けないのなら、makefileでも実現でき
ません。
"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:b0dniv$ovd$1...@ns.src.ricoh.co.jp...
> fj.os.linuxの記事<b0dkhi$8ss$1...@nsvn01.zaq.ne.jp>で
> caas...@hcn.zaq.ne.jpさんは書きました。
> > -Dでは、限界があります。
>
-Dの使用できるオプションの数に制限がある為です。
> 数の制限も文字列の記述も問題ないとして、何が限界な
> のかわかりません。もう少し詳しく書けませんか?
>
> > Cソース書き換えを行わずmakefileでの他の方法が
> > 有れば教えてください。
>
> makefileでできることは、gccのコマンドラインオプシ
> ョンを指定することだけです。やりたいことがgccの-D
> オプションでは書けないのなら、makefileでも実現でき
> ません。
返答有難う御座います。
Cソースに#defineで定義しなおすことを検討します。
ご返答有難う御座いました。
以上
"Akira Kakuto" <kak...@fuk.kindai.ac.jp> wrote in message
news:ttsW9.28581$ZS4.5...@news1.rdc1.ky.home.ne.jp...
>
> <koun...@mbh.nifty.com> wrote in message
> news:b0dj77$svp$1...@news511.nifty.com...
> > 便乗質問ですいません。例えば,
> >
> > #define hoge "hello"
> >
> > みたいなのを,-D オプションで実現するにはどうすれば良いのでしょうか。
> CFLAGS = -Dhoge=\"hello\"
> で行きませんか?
なるほど,理由はよく分かりませんが,バッチリです。(どこにそんなこと書いてあ
るんだろう?。)
有難うございました。
おそらくそれは間違いで、原因は何か他のところにあります。問題の生じる
Makefileやソース(問題が起こる最小限のもの)を投稿する方が、的確な回答が得
られるでしょう。
ni...@ics.nara-wu.ac.jp
"Koji Tsubota" <caas...@hcn.zaq.ne.jp> wrote in message
news:b0dp4v$b82$1...@nsvn01.zaq.ne.jp...
> KOJIです。
>
> Cソースに#defineで定義しなおすことを検討します。
どうしたいのかがよく解らないのですが。。。
いわゆるソースコードの記述されたファイルを触るのを嫌っているのであれば、
変更したい#defineだけを定義したファイルを作っておいて、
それを#includeしておくというのではだめなのでしょうか?
At Sat, 18 Jan 2003 22:01:05 +0900,
Koji Tsubota <caas...@hcn.zaq.ne.jp> wrote:
>
> Kojiです。
>
> CPPFLAGS=-DKOJI
> で実現できるのが分かりましたが
> 他の方法はないでしょうか?
gcc には -imacros というオプションがあり,
これを使うと以下のようなことが可能です.
[使用例]
○ ソースファイル main.c
$ cat main.c
int main(int argc, char **argv)
{
printf("%s %d\n", S1, NUM1);
return 0;
}
○ 別に用意したマクロ定義用ファイル macros.h
$ cat macros.h
#define S1 "USO"
#define NUM1 800
○ 一応 Makefile
$ cat Makefile
all:
gcc main.c -imacros macros.h
○ コンパイル & 実行
$ make
gcc main.c -imacros macros.h
$ ./a.out
USO 800
この方法だと余計なファイルが一つ増えてしまいますが,
ソースに手を加えることは避けられます.
仮に -D の使用回数に制限がある環境があるとしても,
その影響は受けないと思われます.
/* ***************************
OGAWA, Daisuke
e-mail: d_o...@par.odn.ne.jp
* *************************** */
>> CFLAGS = -Dhoge=\"hello\"
>> で行きませんか?
>なるほど,理由はよく分かりませんが,バッチリです。(どこにそんなこと書いてあ
>るんだろう?。)
シェルの man ページに書かれているはずです。RedHat 7.3 では、
$ man bash
・・・
QUOTING
・・・
A non-quoted backslash (\) is the escape character. It
preserves the literal value of the next character that
follows, with the exception of <newline>. If a \<newline>
同様に、
CFLAGS = -Dhoge='"hello"'
でも OK です。
--
片山@PFU
> シェルの man ページに書かれているはずです。
…Linux のマニュアル, 「役に立たない」と思ったことはないですか? 私は
最近 man page を読まない人の気持ちが少しだけわかった気がします.
# ↑は疲れた声で読んでください. 作年末から小さなシステムを作ろうと四苦
# 八苦していたので.
たとえば lilo.conf の ramdisk=xxx の単位は何かとか, fsck -t vfat
(fsck.vfat?) のオプションには存在しないものがマニュアルにあったりとか.
いや, 確かに FreeBSD にもそういうのが無いとはいいませんよ. でも, ねえ….
あまり日常的に使われないコマンド群のせいかもしれませんが, この一ヶ月で
二桁回数くらいそういうのに当った気がします.
あ, 参照していたのは英文マニュアルです.
--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp
In article <b0ghc8$2l6h$2...@news2.rim.or.jp>, doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes
>> シェルの man ページに書かれているはずです。
>
>…Linux のマニュアル, 「役に立たない」と思ったことはないですか? 私は
>最近 man page を読まない人の気持ちが少しだけわかった気がします.
info の方にいろいろ書いてあることが多いようです。ところが、info
の方は巨大すぎるんだよね。
>たとえば lilo.conf の ramdisk=xxx の単位は何かとか, fsck -t vfat
>(fsck.vfat?) のオプションには存在しないものがマニュアルにあったりとか.
>いや, 確かに FreeBSD にもそういうのが無いとはいいませんよ. でも, ねえ….
lilo は、もっとも複雑なものの一つだからなぁ。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球大学工学部情報工学科,
科学技術振興事業団さきがけ研究21(機能と構成)
In article <KATE.03Ja...@flash.tokyo.pfu.co.jp>,
KATAYAMA Yoshio <ka...@pfu.fujitsu.com> wrote:
>>> CFLAGS = -Dhoge=\"hello\"
>>> で行きませんか?
>CFLAGS = -Dhoge='"hello"'
>
>でも OK です。
portability を考えるなら後者の方が無難ですね。Makefile 内
の「\」の扱いについては実装がまちまちで、「\」を幾つ追加した
ら /bin/sh に「\」として渡されるのかが OS や version によっ
て異なるからです。
この例でも、環境によっては「CFLAGS = -Dhoge=\\"hello\\"」
と記述する必要が出て来ると思います。場合によっては 4 つかも。
最近の fj.unix の記事でもありましたが、Makefile 内の「\」
の扱いは POSIX の中ですら二転三転しているようですから、Linux
という platform に限った場合でも version 依存が出て来る可能
性がありますね。
一方の「'」や「"」は Makefile の command line 中では meta
character 扱いになっていないので、そのまま shell に渡される
ことが期待出来ると思います。
# 因みに「hello」の部分を可変にするにはこうします。
# HELLO = hello
# CFLAGS = -Dhoge='"'$(HELLO)'"'
--
しらい たかし
"KATAYAMA Yoshio" <ka...@pfu.fujitsu.com> wrote in message
news:KATE.03Ja...@flash.tokyo.pfu.co.jp...
> In article <b0drn6$n0b$1...@news512.nifty.com>,
> <koun...@mbh.nifty.com> writes:
> >なるほど,理由はよく分かりませんが,バッチリです。(どこにそんなこと書い
てあ
> >るんだろう?。)
>
> シェルの man ページに書かれているはずです。RedHat 7.3 では、
>
> $ man bash
> 同様に、
>
> CFLAGS = -Dhoge='"hello"'
>
> でも OK です。
OKでした。make とshellの関係がよく分かっていなかったので,なぜ?となった次
第です。まあ,今もよく分かっては無いのですが。make でどのように解釈されて
shellに渡されるかとか,どこまでmakeで解釈して実行されているのとか。それで,
makeのmanをみたのですが,これはただ単にオプション関係の記述しかなく,どのよ
うな流れで解釈されているか全く説明がなかったので,そこらを記述したものがどこ
かにあるかなと思い聞いた次第です。
しかし,クォートって中々頭に残らないというか,分かったつもりでもしばらくする
と分からなくなるというか悩ましいですね。(職業プロでないので,いつもプログラ
ムに接している訳でもないのも理由の一つかも知れませんが。1番の理由は能力が足
りてないに尽きますが。)
makeの詳細なdocumentがGUNにあったので,これを読めば少しは分かるのかな。で
も,相当なページ数なので,読みきる自信なし。
グチになりましたが,理解のヒントになりました。有難うございました。また,しら
いさんの記事も大変参考になりました。
> >…Linux のマニュアル, 「役に立たない」と思ったことはないですか? 私は
> >最近 man page を読まない人の気持ちが少しだけわかった気がします.
>
> info の方にいろいろ書いてあることが多いようです。ところが、info
> の方は巨大すぎるんだよね。
少なくともシステム関係は man page で事足りないと駄目でしょう (←古い?).
巨大かどうかは置いといて, アプリケーションの中には「こいつ info の書き
方知らないんじゃないか」と思うような見出しの奴がありますね. もう慣れた
けどたとえば欲しい情報 (オプションとか) がどの枝にあるかわかりにくい…
というより分散されちゃってる. 書いてる方は親切で分けたんだろうけど,
「自分の欲している情報」が basic なのかどうかなんてわかんないだろうに.
結局 concept index とかで見てしまうので「何のためのメニュー形式なんだ」
とか….
> lilo は、もっとも複雑なものの一つだからなぁ。
一応自分に必要だった情報は web 等から手にいれたんですけどね. この辺り
は最近の河野さんのスレッドも参考になりました.
それからモノは RedHat だったんですけど, メニュー形式で設定されるファイ
ルや項目が実際はどれなのかがわからない. 最終的にインストールする先には
メニューによる config プログラムを入れる余裕がなかったので非常に苦労し
ました. chroot? うーん…. システムが必要とするプログラム群もよくわから
なかったし. ローカル色強すぎというか.
# 「*BSD にしましょうよ!」って頑張ったんだけどなぁ.
○
以下, 余談.
開発用のマシン構成が
/dev/hda ← 普通の
/dev/hdd ← シリコンディスク
で, 実機にはケーブルがマスター側しかなくて
/dev/hda ← 普通の
/dev/hdb ← シリコンディスク
とかなる. どちらも BIOS で起動ハードディスクを選択してテストし, 最後は
実機で /dev/hda を外すことになります.
シリコンディスクに /etc/lilo.conf.hdd とか /etc/lilo.conf.hdb とか用意
しておいて, その時々で必要な時に
/sbin/lilo -r /mnt/hd -C /etc/lilo.conf.hdb
とかやってました. conf ファイルの中身なんてもう忘れちゃった.
そうそう, /etc/fstab はどこからでも共通となるように tune2fs で作成した
ディスクラベルを指定しました (デバイス名の変わりに LABEL= で指定する).
これは便利だと思った. FreeBSD にこれがあると root_disk_unit=? だけで完
全に切り替えられるんじゃないかな.