Makefileについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hibari

Makefileについて

#1

投稿記事 by hibari » 12年前

今現在、分割コンパイルについて勉強しているのですが、うまくいきません。
分割したファイルが31個あるのですが、それらをリンクさせようとすると、
make: Too long command line:
というエラーが出て、実行ファイルが作成できません。
最初から一つ一つ試してみて、どうやらファイル数が7個までの場合は
エラーが出ずに作成できるのですが、それ以上になると必ず同じエラーが出ます。
以下がMakefile(実際はもっとファイルがあります)とエラーメッセージになります。
WinXP 32bit、CPad for LSI C-86というソフトで作成しております。
解決方法がありましたら、よろしくお願いいたします。


Makefile

# source : main.c メイン
# : InitList.c 線形リストを初期化
# : SMenu.c メニュー
# : InputD.c ノードのデータ入力
# : InsertR.c ノードを挿入
# : InsertF.c 先頭にノードを挿入
# : AllocN.c 一つのノードを動的に確保
# : SetNode.c ノードの各メンバに値を設定
# : ShowAll.c 全ノード表示
# : PrintD.c ノードの内容を表示
# target : main.exe
#
OBJECTS = main.obj InitList.obj SMenu.obj InputD.obj InsertR.obj InsertF.obj AllocN.obj SetNode.obj ShowAll.obj PrintD.obj
main.exe: $(OBJECTS)
lcc -o main.exe $(OBJECTS)


コンパイルした際のメッセージ

■C:\Documents and Settings\あああ\デスクトップ\testoo> make
lcc -c -o main.obj main.c
lcc -c -o InitList.obj InitList.c
lcc -c -o SMenu.obj SMenu.c
lcc -c -o InputD.obj InputD.c
lcc -c -o InsertR.obj InsertR.c
lcc -c -o InsertF.obj InsertF.c
lcc -c -o AllocN.obj AllocN.c
lcc -c -o SetNode.obj SetNode.c
lcc -c -o ShowAll.obj ShowAll.c
lcc -c -o PrintD.obj PrintD.c
make: Too long command line:
lcc -o main.exe main.obj InitList.obj SMenu.obj InputD.obj InsertR.obj InsertF.obj AllocN.obj SetNode.obj ShowAll.obj PrintD.ob...

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Makefileについて

#2

投稿記事 by softya(ソフト屋) » 12年前

LSI-Cには詳しくないですが、メッセージ通りにmakeのcommand lineバッファがたらないと思うのでobjectファイル名をstdinから入力するオプションとかなにかないのでしょうか?
どちらにしろ、LSI-C86は16bitOS時代(MS-DOS)のレガシーコンパイラですから無理して使わなくてもと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

asdf

Re: Makefileについて

#3

投稿記事 by asdf » 12年前

cpadとlccについて知らないのでテキトーですが..

コマンドシェルへ渡す引数の文字数制限をオーバーしているんだとおもいます。
コマンドラインシェルをcommand.comからcmd.exeにかえてみればいいかもしれませんね(lccがcmd.exeで起動できれば)。

objができてるなら以下のコマンドでexeつくれるかも
C:\Documents and Settings\あああ\デスクトップ\testoo> lcc -o main.exe *.obj

あえてcpad + lcc だったらすみませんが WindowsでC言語のプログラミングをする場合、
Visual C++ Express か MinGW(またはCygwin)環境上でコンパイラはGCCとかが一般的だと思います。どちらも無償です。

asdf

Re: Makefileについて

#4

投稿記事 by asdf » 12年前

書き忘れましたがmakeやMakefileの書式がまちがっているのではなく
command.comかcmd.exeのシェル(cpadがどっちをつかっているかしりませんが)に渡す文字数制限にひっかかっている というだけです。

hibari

Re: Makefileについて

#5

投稿記事 by hibari » 12年前

>objができてるなら以下のコマンドでexeつくれるかも
>C:\Documents and Settings\あああ\デスクトップ\testoo> lcc -o main.exe *.obj
を試してみたところ、実行ファイルを作成することができました。

LSI-C86について色々調べており、他に良い環境があることは知っておりますが、
今やっている物は課題の一つで、LSI-C86を使いなさいと指摘されています。

>コマンドシェルへ渡す引数の文字数制限をオーバーしているんだとおもいます。
>コマンドラインシェルをcommand.comからcmd.exeにかえてみればいいかもしれませんね(lccがcmd.exeで起動できれば)。
command.comやcmd.exeについて調べてみました。
エラーの原因がはっきりと理解でき、設定をしてみたのですが、上手くいきません。

課題の中で「makeを実行するだけで実行形式まで作成されるようにしなさい」
とあり、どうにかしたいと考えています。
やはり、今の環境では厳しいのでしょうか。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: Makefileについて

#6

投稿記事 by YuO » 12年前

LSI C-86 Ver.3.30 試食版 のユーザーズマニュアルを読みましょう。
同2483行目「5.11.1 例その1」に書かれていることがそのままです。
> このような時には、${...}を使えば、応答ファイルの中身をmakefile中に書くこ
> とができます。

コード:

    # makefile for prog.exe
    prog.exe : alpha.obj beta.obj gamma.obj delta.obj epsilon.obj \
                    zeta.obj eta.obj theta.obj iota.obj kappa.obj \
                    lambda.obj mu.obj nu.obj xi.obj omicron.obj pi.obj \
                    rho.obj sigma.obj tau.obj upsilon.obj phi.obj \
                    khi.obj psi.obj omega.obj
            lcc @${-o $@ $#}

hibari

Re: Makefileについて

#7

投稿記事 by hibari » 12年前

>LSI C-86 Ver.3.30 試食版 のユーザーズマニュアルを読みましょう。
>同2483行目「5.11.1 例その1」に書かれていることがそのままです。
まさにその通りでした。

分割コンパイルについて調べたい際にマニュアルも少し見たのですが、全然気が付きませんでした。
無事にmake一発で実行ファイル作成することができました。

回答してくださった皆様、ありがとうございました。
少しずつ勉強していきたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る