• 締切済み

C言語で解らない事があります。

(1)通常とライブラリ用 Makefile の作り方サンプル (2)ライブラリを使ったコンパイルを記述した Makefile 作成時の記述のポイント を教えて頂けませんでしょうか?

みんなの回答

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

こういうのは参考になりませんか?

参考URL:
http://www.unixuser.org/~euske/doc/makefile/
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

まず、Makefile ファイルを作成する前に、実行ファイルとライブラリの作成方法についてご存知ですか? それを知らないと Makefile を書くことはできないですよ。 特にコンパイラを指定されていないので、GCC、ライブラリは ELF、かつ共有ライブラリと仮定しますが、 実行ファイル : gcc -o test.o -c test.c gcc -o test test.o ライブラリ libtest.so とのリンクする場合、 gcc -o test.o -c test.c gcc -o test test.o -ltest ライブラリの作成方法 : gcc -o test.o -fPIC -c test.c gcc -o libtest.so -shared test.o これを Makefile にする (一番上のやつでのサンプル) のであれば、一例ではありますが、 all: test test: test.o ------->gcc -o test test.o test.o: test.c ------->gcc -o test.o -c test.c ※「------->」はタブ文字です。

lopes939
質問者

お礼

早速のご回答誠に有難うございました。 本当に助かりました。 是非、参考にさせて頂きます。 また機会があればお願い致します。 本当に有難う御座いました。

関連するQ&A

  • C言語のmakefileについて

    C言語のmakefileについて質問です。 例えば下記makefileでは、“CC”というマクロを“gcc”という文字列で再定義しています。 しかし中には(1)『CC = gcc』という定義なしでいきなり(2)『$(CC) -o hello $(objs)』 でコンパイルしているmakefileを見るのですが、その場合(2)は何でコンパイルされているのでしょうか。($(CC)の中身はCC??GCC?ACC??) ※下記ターゲット名等はサンプルです。 ------------------ # Makefile objs = hello.o edajima.o CC = gcc hello: $(objs) $(CC) -o hello $(objs) .PHONY: clean clean: $(RM) hello $(objs)

  • C言語の勉強が必要?

    私は入社時に1ヶ月C言語の研修を受けましたが、 実際にプロジェクトとして大きなプログラムを組んだ経験はありません。 その後1~2年Visual Basic、ロータスノーツなどでアプリケーション 作成に携わりましたので、ロジックについては理解しているつもりです。 現在はTurbo Linux上でApache + TOMCAT + PostgreSQLで Webアプリケーション作成の一部を担当しています。 CUIでの操作、ソースからApacheなどのインストール・設定は できるのですが、では ./Configure → make → make install が一体何をしているのかと云うと、 「Makefileを作って、コンパイルして、インストールして」 程度の言葉しか理解しかしていません。 Linuxではこれらの作業をするのが当たり前ですが、 私はマニュアルに書かれた手順どおりに操作するだけで、 実際にコンパイル・(共有)ライブラリ・シンボル・モジュール…、 これらがどのように関わり合って動いているかよく分かっていません。 上記についてしっかり理解するためには C言語の勉強をするべきなのではないか、と思うのですが、 どんな本・サイトを使って勉強するのが良いでしょうか?

  • C言語からjavaを呼び出したい

    C言語からjavaを呼び出したいのでjniを使うことにしました。 各言語のソースはWebで見つけたサンプルを見ながら何とか作成し、各々コンパイルまで終わったのですが、javaのオブジェクト(?)をどこに置いたら良いのかさっぱりわかりません。 java使いの人達には常識の話だと思いますがjavaはサーブレットしか作ったことが無くどうしたものかと困っています。 分からないのは次の2点です。 1.classファイルのままでも良いのかjarにしないといけないのか? 2.どこに設置したら良いのか? これまでやったこと 1.javaのソースを作成しコンパイルしました(classファイルのままです) 2./etc/profileに次のコマンドを追加しました。 LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/java/jdk1.7.0_03/jre/lib/amd64/server export LD_LIBRARY_PATH 3.C言語のソースを次のコマンドでコンパイルしました。 % gcc -I/usr/java/jdk1.7.0_03/include/ -I/usr/java/jdk1.7.0_03/include/linux -L/usr/java/jdk1.7.0_03/jre/lib/amd64/server -ljvm -lpthread jnitest.c -o jnitest 4.javaモジュールの設置←これがわかりません 初歩的な質問で申し訳ありませんがご教示下さい。

    • ベストアンサー
    • Java
  • C言語のバージョン違いのコンパイルについて

    C言語で Solaris9のmakefile、ソースをそのまま利用し Solaris10上でコンパイル可能でしょうか? コンパイルした所、 -------------------------- aaa.mk:構文エラー 行 10: '(' unexpected -------------------------- というエラーが出ましたが、 Solaris10向けにmakefileを見直さないと行けないのでしょうか?

  • C++ コンパイルオプションについて

    C++標準出力に用いるcoutをコンパイルオプションで 入り切りしたい場合、Makefileにはどのように記述したらいいのでしょうか?また、ソース自体も何か記述する必要はありますか? よろしくお願い致します。

  • C++言語でのライブラリファイルの作成と使用法

    よろしくお願いします。 C言語において、例えばMinGWのCコンパイラのLibディレクトリには、拡張子が「.a」のライブラリファイルがたくさん存在しています。これらは、arコマンドで ar crv libMine.a 1.o 2.o のように作成されるものだと認識しています。 一方、C++言語において、例えばBorlandのC++コンパイラのLibディレクトリには、拡張子が「.lib」というライブラリファイルがたくさん存在します。 これらのファイブラリファイルは、C言語のaファイルと同じ役割をする考えてよいのでしょうか? また、C++において自作のライブラリファイル(libファイル)を作成するにはどうすればよいのでしょうか? 次に、C++における自作ライブラリの使用法についてですが、Cではコンパイル時に gcc -o 1.exe 1.c libMine.a のようにして、自作のライブラリファイルを使うことができますが C++のコンパイルコマンド、例えばbcc32コマンドを使ってコンパイルする時に、 自分が作成したlibファイルを使うにはどのようにすればよいのでしょうか? 最後に、Borland C++コンパイラをインストールするときに、Binディレクトリにあるbcc.cfgファイルに -L"c:\Borland\Bcc55\lib" と記述したのですが、これは、 c:\Borland\Bcc55\libにあるlibファイルをコンパイル時に自動的に読み込むということなのでしょうか?

  • C/C++の.libについて教えてください。

    こんにちは。 C/C++のライブラリファイルについて教えてください。 現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。 ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。 LibAでother()関数を利用するのに #pragma comment ( lib, "other.lib" )とソースコード上に記述しました。 (other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定します) ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。 しかし、other.libが開けませんと怒られてしまいます。 other.libを利用しているのはLibAなのでProj側でother.libを読み込むように強制されるのは面倒臭いのですが、LibA側にother()関数を埋め込むようなことはできないのでしょうか? LibAを利用するProjでもother.libを要求されないようにするにはどうすればいいでしょうか? /* スタティックライブラリを作成するためにLibAをコンパイルする時に#pragma comment ( lib, "other.lib" )の記述が不要というのは知っています。 LibAにその記述を行わなかった場合Projで自分で記述する必要があることも知っています。 */ 現在、私が思いついているのはother.libを作成するプロジェクトのソースコードを引っ張ってきてLibAに入れて一緒にコンパイルするくらいです。 日本語がへたくそでわかりづらいところがあるかとは思いますがよろしくお願いします。

  • C言語での質問です

    C言語を始めて、2ヶ月くらいです。コンパイラは、Borlandc++で、エディタは、bcpadに付いていたものを使っています。 「サンプル通り作成したプログラムがコンパイルエラーになり」 一つ一つ確認しても、間違っている箇所が見つかりません。一人で解決できないとき、皆さんはどのようにして解決していますか。

  • libjpegライブラリを使いたいです/C言語

    画像処理の勉強もかねて、libjpegライブラリを使いたいと思っています。 ダウンロードをして、 makefile.vc と jconfig.vc を makefile と jconfig.h にファイル名変更する必要があると思います。 (自分はVC++環境でやるので) しかし、肝心のファイル名を変更できません。 どうやら保護がかかっているみたいなのですが、どうすればいいですか? フリーなのでライセンスはいらないですよね? 初心者なので優しい解説お願いします。

  • C言語の実行モジュール、コンパイル

    2点程、教えて頂きたい事があります。 よろしくお願いします。 (1)Solaris9でC言語でコンパイルされた実行モジュールを、そのままSolaris10にコピーし実行した場合、実行できるのでしょうか? (2)Solaris10で、makefile等を利用しC言語のコンパイルをしようと思うのですが、Solaris10がインストールされた段階で既にコンパイルする環境は整っているのでしょうか?。それともCD等からコンパイル環境をインストールしないといけないのでしょうか?(Solarisメディアが無い場合にコンパイル可能でしょうか?)

専門家に質問してみよう