今現在、分割コンパイルについて勉強しているのですが、うまくいきません。
分割したファイルが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...
Makefileについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: Makefileについて
LSI-Cには詳しくないですが、メッセージ通りにmakeのcommand lineバッファがたらないと思うのでobjectファイル名をstdinから入力するオプションとかなにかないのでしょうか?
どちらにしろ、LSI-C86は16bitOS時代(MS-DOS)のレガシーコンパイラですから無理して使わなくてもと思います。
どちらにしろ、LSI-C86は16bitOS時代(MS-DOS)のレガシーコンパイラですから無理して使わなくてもと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: Makefileについて
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とかが一般的だと思います。どちらも無償です。
コマンドシェルへ渡す引数の文字数制限をオーバーしているんだとおもいます。
コマンドラインシェルを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とかが一般的だと思います。どちらも無償です。
Re: Makefileについて
書き忘れましたがmakeやMakefileの書式がまちがっているのではなく
command.comかcmd.exeのシェル(cpadがどっちをつかっているかしりませんが)に渡す文字数制限にひっかかっている というだけです。
command.comかcmd.exeのシェル(cpadがどっちをつかっているかしりませんが)に渡す文字数制限にひっかかっている というだけです。
Re: Makefileについて
>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を実行するだけで実行形式まで作成されるようにしなさい」
とあり、どうにかしたいと考えています。
やはり、今の環境では厳しいのでしょうか。
>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を実行するだけで実行形式まで作成されるようにしなさい」
とあり、どうにかしたいと考えています。
やはり、今の環境では厳しいのでしょうか。
Re: Makefileについて
LSI C-86 Ver.3.30 試食版 のユーザーズマニュアルを読みましょう。
同2483行目「5.11.1 例その1」に書かれていることがそのままです。
> このような時には、${...}を使えば、応答ファイルの中身をmakefile中に書くこ
> とができます。
同2483行目「5.11.1 例その1」に書かれていることがそのままです。
> このような時には、${...}を使えば、応答ファイルの中身をmakefile中に書くこ
> とができます。
Re: Makefileについて
>LSI C-86 Ver.3.30 試食版 のユーザーズマニュアルを読みましょう。
>同2483行目「5.11.1 例その1」に書かれていることがそのままです。
まさにその通りでした。
分割コンパイルについて調べたい際にマニュアルも少し見たのですが、全然気が付きませんでした。
無事にmake一発で実行ファイル作成することができました。
回答してくださった皆様、ありがとうございました。
少しずつ勉強していきたいと思います。
>同2483行目「5.11.1 例その1」に書かれていることがそのままです。
まさにその通りでした。
分割コンパイルについて調べたい際にマニュアルも少し見たのですが、全然気が付きませんでした。
無事にmake一発で実行ファイル作成することができました。
回答してくださった皆様、ありがとうございました。
少しずつ勉強していきたいと思います。