
どうもこんにちは
趣味でプログラムを作っています。
make コマンドを使ってコンパイルしているのですが、Makefile のマクロ(変数?)でちょっとわからないものがあります。
最初から用意されているマクロで、LDLIBSとLOADLIBESというものがありますが、これらはどのように使用するのでしょうか?
webで調べてみると、リンクするライブラリのパスを指定するマクロのようですが、両者の違いがよくわかりません。
どちらかを適当に選んで使えばいいのでしょうか?
それとも、まったくの別物でしょうか?
No.3ベストアンサー
- 回答日時:
>その際に使用されている LOADLIBES や LDLIBS には何を
>指定するのかわかりませんでした。
ANo.1で回答した通り
>LDLIBS と LOADLIBES のどちらを使用するか、また別の変数を
>使うかは自由です。
>#多数のプログラムを同時にコンパイルする場合でリンクする
>#ライブラリがプログラムによって異なる場合は、LDLIBS2等
>#追加する事も可能です。
従って、LOADLIBES と LDLIBS を共に使用しても何も問題は
有りません。
どうして、そうなるのか理由を理解した上で使用しないと
1文字違うだけで何も対処できなくなってしまいます。
WEB検索で見つけた例だけにこだわらない様に注意しましょう。
回答ありがとうございます。
なぜ Makefile の暗黙ルールで、LOADLIBES と LDLIBS という、同様の機能を表現する(ように見える)記述が2つあるのか、歴史的(政治的?)背景を知りたかったのですが。。。
これは他の文献を調べてみようと思います。
実際に使用する際は、とりあえずはあまりこだわらないことにします。
ありがとうございました。
No.2
- 回答日時:
>CC や CFLAGS といったデフォルトのマクロのつもりで書いてました。
CC もCFLAGS も LDLIBSやLOADLIBESと同じく暗黙のルールと
して慣用的に使用されているもので、他の値に変えても実行
可能なので「デフォルト」とは言い難いのですが...
>その際に使用されている LOADLIBES や LDLIBS には何を
>指定するのかわかりませんでした。
標準ライブラリ以外のライブラリの追加指定に使用します。
例) -lm :libm.a(GNU C用数値演算ライブラリ)を追加参照
他にもグラフィックライブラリ、データベース、機器制御用
等様々なライブラリ(自作ライブラリ含む)との組合せにより
他の言語にない程の機能拡張が可能になります。
回答ありがとうございます。
「特に指定していなかった場合に使用される値」という意味でデフォルトと表現していました。
語弊のある表現だったかもしれません。すいません。
ちなみに make の内部データベースには以下のように記述されていました。
一部抜き出します。
# デフォルト
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# デフォルト
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# ターゲットではありません:
.o:
# 暗黙ルールの探索は行われませんでした.
# 修正時刻がチェックされることはありません.
# ファイルは更新されていません.
# 実行するコマンド (ビルトイン):
$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
もっと詳細に書くと、sample.c を作成し、
all: sample
という文をMakefile に記述し、
特にコマンドが指定されていなかった場合に使用されるルールを使用し、コンパイルしようと考えてます。
今は、CFLAGS には -Wall や -O2 を指定してます。
(例えば CFLAGS := -Wall -O2 -Werror)
必要なライブラリをリンクするために -lm や、他の自作のライブラリを追加するオプションを指定していますが、それらは今は LDLIBS に指定しています。
(例えば LDLIBS := -lm $(MY_LIBRARY) )
これは web に LDLIBS にはライブラリを指定すると記述してある例があったため、それを参考にしました。
そして、端末から、
make -p
を実行し、make で使用されているルールを見たところ、LDLIBS だけでなく、LOADLIBES も指定されていました。
($(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@ など)
改めて web で検索したところ、LOADLIBES にライブラリを指定している例も見つけました。
使用するライブラリは、LDLIBS と LOADLIBES どちらに指定しても問題なく動くように見えましたが、それ以上は調べてみてもどちらに指定するべきかわかりませんでした。
LDLIBS と LOADLIBES に違いはあるのでしょうか?
(例えば、LDLIBS には標準のライブラリを記述し、LOADLIBES には自作のライブラリを指定する など)
慣例的、歴史的にどのような記述をするのが望ましいのかわかりませんでした。
(all: sample でなくても、
maker: sample でも create001: sample でも実行ファイルが作成できるが、一般的には all が使用されるなど。)
No.1
- 回答日時:
LDLIBSもLOADLIBESも最初から用意されているマクロでは
ありません。
一般的にはリンクするライブラリの記述に使用されるマクロ
変数です。
通常はMakefile内で LDLIBS = -lm または LOADLIBES = -lm
の様に明記しますが、予め環境変数に設定しておけば省略が
可能です。
LDLIBS と LOADLIBE のどちらを使用するか、また別の変数を
使うかは自由です。
#多数のプログラムを同時にコンパイルする場合でリンクする
#ライブラリがプログラムによって異なる場合は、LDLIBS2等
#追加する事も可能です。
回答ありがとうございます。
最初から用意されている、という表現は少々語弊があったかもしれません。
CC や CFLAGS といったデフォルトのマクロのつもりで書いてました。
暗黙のルールの検索で、例えば
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
このようなコマンドが実行されることがあり、
その際に使用されている LOADLIBES や LDLIBS には何を指定するのかわかりませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Excel(エクセル) excelの列幅高さが勝手に変わる(特定のPCだけ) 8 2022/07/14 16:51
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Excel(エクセル) excelのマクロ実行でブロックされます。 2 2022/06/08 09:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
拡張子.niiのファイルの開き方...
-
Visual Studio community 2019...
-
JQuery などの Javascript ライ...
-
ファイルの圧縮/解凍(Zlib)に...
-
Excel VBA のstr()関数でエラー
-
.NET(C#)でのスタックオーバー...
-
Excel 参照設定ActiveDirectory
-
iTuneライブラリとiPhone,iPod...
-
こんなAjaxのサンプルご存じな...
-
Linuxの動的ライブラリをMacで...
-
オブジェクトライブラリ
-
写真の著作権についての質問です。
-
WindowsXPにApache OpenOffice...
-
企業がオープンソースを提供す...
-
AGPLv3の商用利用について
-
フリーウェアのソースコードの...
-
ソースコードに詳しい方・・・
-
IT用語、ソースとオブジェクト...
-
ffmpeg.exeの配布について
-
MPL2.0ライセンスのライブラリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX上のプログラムで使うライ...
-
拡張子.niiのファイルの開き方...
-
Excel VBA のstr()関数でエラー
-
DXライブラリの画像の表示の仕...
-
.NET(C#)でのスタックオーバー...
-
MakefileのLDLIBSとLOADLIBESの...
-
ライブラリParamQuery gridにつ...
-
QRコード作成ライブラリ
-
Googlemapのように画像を拡大・...
-
動的ロードのメリット
-
Linux で動的に動的結合をする...
-
「MFC40D.DLLがみつかりません...
-
PDFファイルの文字を取得するプ...
-
ライブラリ内の処理中における...
-
ファイルの圧縮/解凍(Zlib)に...
-
C言語 画像処理 jpeg → pgm
-
RapidSVNをUNIX上で使用したい
-
C++BuilderやDelphiでVC++用の...
-
コンパイル時のエラー
-
Unsatisfied code symbol エラ...
おすすめ情報