Makefile.inとMakefile.am | systemCのインストールとサンプルプログラムのコンパイル方法がわからない

このQ&Aのポイント
  • 回路設計のためにsystemCをLinux(CentOS)にインストールしましたが、サンプルプログラムのコンパイル方法がわかりません。
  • Makefile.inとMakefile.amというファイルがあやしいと思いますが、これをどのように使えばいいのでしょうか?
  • 解決策や参考文献など、教えていただけると助かります。
回答を見る
  • ベストアンサー

Makefile.inとMakefile.am

回路設計をするためにsystemCをlinux(centOS)にインストールしました。サンプルプログラムの入ったディレクトリがあってそのサンプルプログラムをコンパイルして実行したいです。ところがコンパイルの仕方がわかりません。 例)rsaというディレクトリの内容 [root@localhost rsa]#ls -l -rw-r--r--. 1 root root 2023 11月 27 21:24 2012 Makefile.am -rw-r--r--. 1 root root 16276 11月 27 21:24 2012 Makefile.in -rw-r--r--. 1 root root 2072 11月 27 21:24 2012 README -rw-r--r--. 1 root root 14137 11月 27 21:24 2012 rsa.cpp -rw-r--r--. 1 root root 4644 11月 27 21:24 2012 rsa.vcproj 予想するに、systemCをインストールするときに $./configure $make $make install と打ったので、Makefile.inとMakefile.amがあやしいと思うのですが、これをどのように使ったらよいのやらわかりません。 教えてください。もしくは、参考文献などを教えてください。 すみません。

  • koun
  • お礼率37% (81/216)

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

READMEにインストール方法書いてたりしませんか?

koun
質問者

補足

回答ありがとうございます。 READMEにはサンプルプログラムの動作の説明しか書いてありませんでした。

その他の回答 (2)

noname#208507
noname#208507
回答No.3

SystemCをインストールしたことはないので,推測できる範囲で. $./configure を実行した後に rsa ディレクトリに Makefile ファイルが作成されていませんか? 下記のサイトにある SystemC 2.3 の configure.in のソースリストを見ると 307行目に examples/sysc/rsa/Makefile と書いてあります. ( https://github.com/systemc/systemc-2.3/blob/master/configure.in ) すなわち,この configure.in から作られた configure スクリプトであれば,実行すると examples/sysc/rsa/Makefile.in を元に examples/sysc/rsa/Makefile を生成するはずなのです.configure スクリプトを実行しても rsa ディレクトリに Makefile が作られないとすれば,何らかの理由で違う configure.in から作ったものが同梱されていたのでしょう. configure.in ファイルのあるディレクトリ(configureと一緒にあるはず)に移動して $ autoconf を実行すれば configure スクリプトを作り直すことができます. それでもう一度,インストールの手順を繰り返せば,rsa ディレクトリに Makefile が作られるのではないかと思います. rsa ディレクトリに Makefile が生成されれば,そのディレクトリに移動して make を実行すればプログラムがコンパイルされます.

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.2

automake,autoconfが関わってることはわかるんですが私自身その使い方を理解しているわけでないので、ご自分で調べてみてください。

関連するQ&A

  • makeでコンパイル

    今、ディレクトリが以下の状態です。 [root@localhost rsa]#ls -l -rw-r--r--. 1 root root 2023 11月 27 21:24 2012 Makefile.am -rw-r--r--. 1 root root 16276 11月 27 21:24 2012 Makefile.in -rw-r--r--. 1 root root 2072 11月 27 21:24 2012 README -rw-r--r--. 1 root root 14137 11月 27 21:24 2012 rsa.cpp -rw-r--r--. 1 root root 4644 11月 27 21:24 2012 rsa.vcproj この状態で、c++プログラムである「rsa.cpp」をコンパイルしたいのですが、コンパイルの仕方がわかりません。参考書には「makeを利用してコンパイルする」としか書かれていません。どうしたらよいのでしょうか?

  • makeコマンドができない

    基本的なことだと思いますがお願いします。 fedore core で色んなことをやってみようと思い sl を インストール していたのですがmakeができないのです。インストール通りにできないの はなんでですか? makeコマンドは /usr/bin にありました。 的はずれなこと言っていたらすみません。 [root@localhost sl]# ls -lrt 合計 36 -rw-r--r-- 1 3605 lock 4101 1月 19 1994 sl.h -rw-r--r-- 1 3605 lock 980 1月 19 1994 sl.txt -rw-r--r-- 1 3605 lock 689 1月 19 1994 sl.1 -rw-r--r-- 1 3605 36 417 7月 22 1998 README -rw-r--r-- 1 3605 36 331 7月 22 1998 Makefile -rw-r--r-- 1 root root 76 10月 31 2005 install.txt -rw-r--r-- 1 3605 36 7131 10月 31 2005 sl.c [root@localhost sl]# more install.txt 1. # tar xvf sl.tar 2. # cd sl 3. # make 4. # cp sl /usr/local/bin/ 5. # sl [root@localhost sl]# make cc -O -o sl sl.c -lcurses -ltermcap make: cc: コマンドが見つかりませんでした make: *** [sl] エラー 127

  • AVR Studio4 の使用方法

    AVR Studio4 をダウンロードし C言語でプログラムを作りたいのですが WinAVR もいれ AVR Gccで製作しました。 簡単な テスト サンプルをコピー ビルドすると make: Makefile: No such file or directory make: *** No rule to make target `Makefile'. Stop. Build failed with 2 errors and 0 warnings... が表示され コンパイルできません。  C言語プログラム すべて このようなエラーが出て コンパイルできません。  どのように直せば C言語プログラム受け付けてくれるのでしょうか?

  • Makefileの書き方

    正しいかどうかわかりませんが、インターネットである程度検索してから以下のようなJavaのコンパイル用Makefileを作成しました。なお、全てのクラスのパッケージは package abc.def.ghi; です。 ---Makefile--- .SUFFIXES: .java .class JC = /usr/bin/javac PATH = ./abc/def/ghi/ CLASSPATH = -classpath /Users/macintosh/ TARGET1 = Prog1 TARGET2 = Prog2 TARGET3 = Prog3 list: $(PATH)$(TARGET1).class \ $(PATH)$(TARGET2).class \ $(PATH)$(TARGET3).class .java.class: $(JC) $(CLASSPATH) $< clean: /bin/rm -f $(PATH)*.class これで/Users/macintoshディレクトリからmakeを実行すると、 /usr/bin/javac -classpath /Users/macintosh/ abc/def/ghi/Prog1.java /usr/bin/javac -classpath /Users/macintosh/ abc/def/ghi/Prog2.java /usr/bin/javac -classpath /Users/macintosh/ abc/def/ghi/Prog3.java が実行され、無事にクラスファイルが3つ生成されます。-classpathによりクラスパスも同時に設定されるので、あとはどこのディレクトリからでも $java abc.def.ghi.Prog1 でプログラムが実行されると思ったのですが/Users/macintosh/以外のディレクトリから実行すると Exception in thread "main" java.lang.NoClassDefFoundError: というエラーになります。何がおかしいのでしょうか。あと、Java用のMakefileで改善したところがあれば教えて下さい。

    • ベストアンサー
    • Java
  • Makefileについて

    Qtで、ちょっとしたプログラムを書いたのですが、あえてqmakeは使わずに自分でMakefileを書いてみました。 以下、Makefileの内容(タブは全角空白2個に置き換えてます) #QtApp template #Variables #  Package infomation NAME        =  DPMWindow #  Resources C_SOURCE      =   CPP_SOURCE      =  src/DPMArk.cpp\           src/DPMMaster.cpp \           src/DPMNode.cpp \           src/DPMResult.cpp \           src/DPMWindow.cpp \           src/main.cpp MO_HEADER      =  include/DPMWindow.h UI        =  share/ui/DPMWindow/DPMWindow.ui OTHER_RESOURCE1      =  share/icons/DPMWindow/icon.png OTHER_RESOURCE2      =   #  Compiling settings DEFINE        =  -DPATH=\"/usr/local\" INC_DIR        =  include LIB_DIR        =   LINK_LIB_FLAG      =   PKG_CONFIG      =  `pkg-config --cflags --libs QtGui` OUTPUT_DIR      =  bin #  Install settings INSTALL_ROOT      =  /usr/local BIN_INSTALL_DIR      =  bin OTHER_RESOURCE1_INSTALL_DIR  =  share/icons/DPMWindow OTHER_RESOURCE2_INSTALL_DIR  = #Invariables #  Package infomation BIN_FILE_NAME      =  $(NAME) #  Resources MOC_CPP_SOURCE      =  $(MO_HEADER:%.h=%.mo.cpp) UI_HEADER      =  $(UI:%.ui=%.ui.h) OBJ        =  $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(MOC_CPP_SOURCE:%.cpp=%.o) #  Compiling and Archiving settings OUTPUT        =  $(OUTPUT_DIR)/$(BIN_FILE_NAME) INCLUDE_FLAG      =  $(patsubst %,-I%,$(INC_DIR)) $(patsubst %,-I%,$(dir $(UI))) LIB_FLAG      =  $(patsubst %,-L%,$(LIB_DIR)) #  Commands CC        =  gcc -o CPPC        =  g++ -o CC_OBJ        =  gcc -c -o CPPC_OBJ      =  g++ -c -o MOC        =  moc-qt4 -o UIC        =  uic-qt4 -o RM        =  rm -Rf MKDIR        =  mkdir -p TEST        =  test -d INSTALL        =  install -m 0755 -p CP        =  cp -R #  Install settings INSTALLED_BIN      =  $(addprefix $(INSTALL_ROOT)/$(BIN_INSTALL_DIR)/, $(notdir $(OUTPUT))) INSTALLED_OTHER1    =  $(addprefix $(INSTALL_ROOT)/$(OTHER_RESOURCE1_INSTALL_DIR)/, $(notdir $(OTHER_RESOURCE1))) INSTALLED_OTHER2    =  $(addprefix $(INSTALL_ROOT)/$(OTHER_RESOURCE2_INSTALL_DIR)/, $(notdir $(OTHER_RESOURCE2))) all: $(OUTPUT) $(OUTPUT): $(UI_HEADER) $(OBJ)   $(CPPC) $(OUTPUT) $(OBJ) $(LIB_FLAG) $(LINK_LIB_FLAG) $(PKG_CONFIG) %.o: %.c   $(CC_OBJ) "$@" $(DEFINE) $(INCLUDE_FLAG) $(LIB_FLAG) "$<" $(LINK_LIB_FLAG) $(PKG_CONFIG) %.o: %.cpp   $(CPPC_OBJ) "$@" $(DEFINE) $(INCLUDE_FLAG) $(LIB_FLAG) "$<" $(LINK_LIB_FLAG) $(PKG_CONFIG) %.mo.cpp: %.h   $(MOC)"$@" "$<" %.ui.h: %.ui   $(UIC) "$@" "$<" clean:   $(RM) $(OBJ) $(MOC_CPP_SOURCE) $(UI_HEADER)   $(RM) ./*/*~ ./*~ install: install_bin install_other1 install_other2 install_bin:   $(TEST) $(INSTALL_ROOT)/$(BIN_INSTALL_DIR) | $(MKDIR) $(INSTALL_ROOT)/$(BIN_INSTALL_DIR)   $(INSTALL) $(OUTPUT) $(INSTALL_ROOT)/$(BIN_INSTALL_DIR)/$(LIB_FILE_NAME) install_other1: $(OTHER_RESOURCE1) $(OTHER_RESOURCE1):   $(TEST) $(INSTALL_ROOT)/$(OTHER_RESOURCE1_INSTALL_DIR) | $(MKDIR) $(INSTALL_ROOT)/$(OTHER_RESOURCE1_INSTALL_DIR)   $(CP) $(OTHER_RESOURCE1) $(INSTALL_ROOT)/$(OTHER_RESOURCE1_INSTALL_DIR) install_other2: $(OTHER_RESOURCE2) $(OTHER_RESOURCE2):   $(TEST) $(INSTALL_ROOT)/$(OTHER_RESOURCE2_INSTALL_DIR) | $(MKDIR) $(INSTALL_ROOT)/$(OTHER_RESOURCE2_INSTALL_DIR)   $(CP) $(OTHER_RESOURCE2) $(INSTALL_ROOT)/$(OTHER_RESOURCE2_INSTALL_DIR) uninstall: uninstall_bin uninstall_bin:   $(RM) $(INSTALLED_BIN) 以上、Makefileの内容 makeはちゃんとでき、プログラムも実行できるのですが、makeの最後に記述した覚えのない rm include/DPMWindow.mo.cpp が実行されます。 まぁ、別に困らないのですが、Makefileを何度か見直しても分からなかったので、原因が分かれば回答をお願いします。

  • makefileでのファイル指定について

    プログラムを実行するためのコンパイルでは、makeを使うことが多いと思います。makefileというファイルにその内容を書いておくわけですが、makeというのは必要なものをかき集めて(不必要なものは集めない)セットしていくということなるわけですね。ファイルを集めるというのは結局はフォルダを指定するということなのですが、そのフォルダとは相対パスで指定するのか、絶対パスで指定するのか考え方を教えて頂きたいのですが。私の予想では当然ながら相対パスが普通だということなのですが。また絶対パスでもいいということにもなるでしょうか。./とかつけてフォルダ指定すると相対パスになるとか。makeは苦手でそこを確認したいと思いました。 あと、必ずではありませんが./configureとかしますが、これは何をしているのでしょうか。 よろしくお願いします。OSとしてはWindows, WSLというところでの利用を考えています。

  • CentOSにRTL8111Cインストールできない

    CentOSをインストールしましたがNICを検出しません。 調査しRTL8111Cであることが分かり、ReadMeに書かれているように 以下の手順を試みましたが、組み込めません。 どなたか対策方法がお分かりになる方教えて下さい。 尚、PCはPCIBusを持っていませんので、別売りの100BASENICに換え ることもできません。初心者で手順が悪いのかよく分かりません。 (1)Realtekからドライバの入手   r8168-8.008.00tar.bz2 (2)ドライバのコピー先を”/root/DownLoad”作成 (3)ドライバをこのフォルダーに入れダブルクリック(解凍) (4)"r8168-8.008.00"が作られ中に以下のフォルダとファイルが生成される  src  Makefile  readme  release_note.txt (5)GNOME端末で # cd Download # cd r8186-8.008.00  # make clean modules (6)表示 [root@localhost Download]# cd r8168-8.008.00 [root@localhost r8168-8.008.00]# make clean modules make -C src/ clean make[1]: ディレクトリ `/root/Download/r8168-8.008.00/src' に入ります rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers *.order make[1]: ディレクトリ `/root/Download/r8168-8.008.00/src' から出ます make -C src/ modules make[1]: ディレクトリ `/root/Download/r8168-8.008.00/src' に入ります make -C /lib/modules/2.6.18-8.el5/build SUBDIRS=/root/Download/r8168-8.008.00/src modules make: Entering an unknown directory make: *** /lib/modules/2.6.18-8.el5/build: そのようなファイルやディレクトリはありません. 中止. make: Leaving an unknown directory make[1]: *** [modules] エラー 2 make[1]: ディレクトリ `/root/Download/r8168-8.008.00/src' から出ます make: *** [modules] エラー 2 [root@localhost r8168-8.008.00]# 宜しくお願いします

  • 移植性の高いmakefileの作成

    移植性の高いmakefileの作成 C言語で書かれたソースファイルをmakeツールでビルドしています。 もともとコンパイラとして「Borland C++ Compiler 5.5.1」を使用し、Borland C++ 同ツール付属のmakeツール「MAKE Version 5.2」を使用していました。 makeの基本文法は理解しており、Borlandのコンパイラを使用している間は特に問題ありませんでした。 しかし最近、新たにGCC系列のMinGWという開発環境一式と、補助ツールMSYSを導入し、既存のmakefileをGCCおよびGNUmakeに対応させることにしました。 具体的には、 GMAKEを起動した場合はgccでコンパイルする。 Borland make を起動した場合にはbcc32でコンパイルする。 という切り替えを同一のmakefileで行おうと考えました。 しかし、ここで問題が発生しました。 makeの依存関係部分はborland付属make(以下Bmakeとします)とGNUmakeであまり違いはないのですが、単一のmakefileで対応しようとすると、どうしてもコンパイラオプションやコンパイルコマンドを切り替える部分が必要です。しかし、ifdefやincludeディレクティブに関してはお互いにまったく互換性がなく、片方のmakeで有効なフラグをつかってifdefで分岐しようとしても、もう片方では完全に文法エラーです。 例えば、ifdefやincludeディレクティブは、Bmakeでは先頭に!が必要ですが、GNUmakeには必要ありません。 以下の書籍でポータブルなmakefileの記述に関していろいろ調べたのですが、Bmakeの特殊な文法についての言及がなく、対応策が見つかりません。 様々な環境でビルドされるFireFox3.0のソースコードも参考にしようとmakefileと思われるファイルを全て検索したところ、1769個ほど見つかりました。 その中で!ifdefディレクティブを使用しているのは極わずかで、Makefile.winという名称のものがいくつかあっただけでした。 しかもそれらは最後の方にincludeディレクティブも使っていました。 例えば、MozillaFirefox3.0のソースコードにあるmakefaileの内、firefox-3.0-source.tar\mozilla\dbm\src\Makefile.winは「include <$(DEPTH)/config/rules.mak>等」、という一文がある一方、その他のifなどのディレクティブは頭に!をつけられており、全体としてはBmake(多分ターゲットはMSVC++だと思いますが。)です。 これはBmakeではエラーになるはずなのですが、動作機構は不明です。 また、条件付マクロというテクニックで、ある値が定義されていれば左値を、定義されてなければ右値を使ってマクロ置換するテクニックがあったので、これでディレクティブをマクロ置換してやろうと考えました。しかし、ディレクティブをマクロ定義することはできないようでこれも失敗しています。 #INCLUDE というマクロを定義して、 INCLUDE = $(_GNUMAKE_?include:!include) #マクロをディレクティブ命令として使う $(INCLUDE) testmake.mk それぞれのmake専用makefileを作るのは簡単ですが、新しいプログラムを追加するたびに複数のmakefileを書き直すのは避けたいのです。 長々と書きましたが、解決策として次の2つのいずれかのようなものがあれば教えていただきたいです。 1. ifやincludeディレクティブに代わる、GNUmakeとBmake両方に使えるテクニック。 2. 起動したmakeによって条件分岐、もしくは読み込むファイルを切り替えるテクニック。 よろしくお願いいたします。 開発環境 OS: winXP コンパイラ: 「Borland C++ Builder 6.0」「Borland C++ Compiler 5.5.1」「gcc version 3.4.5 (mingw special)」 make: 「MAKE Version 5.2 (C++ BuilderとC++ Compiler 5.5.1はおなじmakeを使用している模様)」「GNU Make version 3.79.1」 参考文献 1. 「GNU Make 第3版」オライリージャパン、2005年 2. 「C言語逆引き大辞典」秀和システム、2003年 3. 「GNUソフトウェアプログラミング」、?年

  • Linux Makefile変数の値をプロンプトから受けたい

    Linux上でソースコンパイルのためのMakefileを書いてるんですが、インストール先をmake実行者に標準入力から入力させたいんですよ。 bashのreadコマンドで変数に入れられんのかな?と思って以下のように書いて実行しましたがうまく行きません。 ------------------------------------------------- install : @read -p "install dir << " DIR cp -p ${FILE} ${DIR} ------------------------------------------------- echoさせてみると${DIR}は空っぽみたいです。 どなたか、書き方を教えてください。

  • Makeについての質問

    こんにちは、Makotoと申します。 AIX上でCの開発を行っているのですが、 各ディレクトリにMakeFileがあり、 コンパイルのたびに各ディレクトリに移動して Makeを行っているのですが、面倒になってきたので、 以下のような簡単なシェルを作成しました。 cd /目的のディレクトリ make depend make clean make 上記と同じ記述が続く.... 始めの内は、規模が小さかったのでよかったのですが、 新しいプログラムが増えるたびに、同じ記述をするのも あまりきれいではないのでMakeFileを検出して Makeを実行させるといったことはできるのでしょうか?

専門家に質問してみよう