ページ 11

WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月19日(日) 20:39
by HH
当方Windows環境でMinGWというコンパイラを使用しております。

龍神録プログラミングの館にあるゲーム制作に挑戦するつもりだったんですが、愛用のMinGWを取り扱ってないので、このMinGWでWINDOWSのソースコードをコンパイルするのに必要なファイルがあるのかだとか、もしファイルが内包されているとしたら、そのコンパイルコマンドなるものが知りたいです。
初歩的な質問で大変申し訳ないのですが、ぐぐっても分からないので教えて下さい。

※希望としては、なるべく不要な物はインストールしたくないので、理想の開発環境は、エディタ(emacs)+コンパイラー(WINDOWS用のもの)のみという形が望ましいです。
よろしくお願いいたします。

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月19日(日) 21:22
by みけCAT
基本的なWindows用のヘッダはあるはずです。
DXライブラリは、公式HPでMinGW(GNU C++)用のものも配布されています。

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月20日(月) 07:15
by beatle
私もMinGW + GCC 4.6 + DXライブラリという組み合わせでゲームを開発しています.
重要なのは,Gnu C++ ( Bloodshed Dev-C++ ) によるDXライブラリの使い方に書かれているように,適切なコンパイルオプション(-Dや-I)を設定することです.

一つ質問したいのですが,「WINDOWSのソースコード」って何でしょうか?マイクロソフトからソースコードをもらったとか?

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月20日(月) 15:32
by HH
WINDOWSのソースコードは間違いで、恐らく正しくはC言語のWINDOWSプログラミングっていう事のコンパイル方法でした。すいません。

コード:

int WINAPI WinMain(){}
上のソースコードをコンパイルするコマンドは、gcc filename.cでしょうか・・。
あと、DXライブラリのファイルの中身って、恐らくアセンブラファイル?と、ヘッダファイルの2種類が入ってるかと思うんですが
これをパスでいうと、~\MInGW\binに入れたらいいでしょうか?

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月20日(月) 17:37
by softya(ソフト屋)
上のソースコードをコンパイルするコマンドは、gcc filename.cでしょうか・・。
すこし違います。こちらを参考にして下さい。
「よしいずの雑記帳  MinGWでWindowsプログラミングを行う方法」
http://yoshiiz.blog129.fc2.com/blog-entry-208.html
あと、DXライブラリのファイルの中身って、恐らくアセンブラファイル?と、ヘッダファイルの2種類が入ってるかと思うんですが
これをパスでいうと、~\MInGW\binに入れたらいいでしょうか?
DXライブラリ自体はC++のライブラリです。なので、C言語ではなくC++としてコンパイルする必要があります。
MinGW自体には私は詳しくないですが、g++で標準的なものはコンパイルできると思いますがリンカの指定なども含めるとmakefileを作ることになると思います。
自信がないなら、Dev-C++を使われたほうが簡単だと思います。

過去ログにmakefileがありました。
「簡単&お手軽C++入門サイト構築について [雑談] • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?t=8314&p=68201

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月20日(月) 17:49
by たかぎ
HH さんが書きました:

コード:

int WINAPI WinMain(){}
上のソースコードをコンパイルするコマンドは、gcc filename.cでしょうか・・。
少し違います。 gcc -mwindows filename.c で何とかなるはずです。
HH さんが書きました:あと、DXライブラリのファイルの中身って、恐らくアセンブラファイル?と、ヘッダファイルの2種類が入ってるかと思うんですが
これをパスでいうと、~\MInGW\binに入れたらいいでしょうか?
好きなところにファイルを入れればよいと思いますが、それに応じたオプションを指定する必要があります。
DXライブラリを使う場合のコマンドを無理やり書くと、おそらく次のようになるかと思います。

g++ -mwndows -DDX_GCC_COMPILE -DDX_NON_INLINE_ASM filename.cpp -Lライブラリを置いたディレクトリ -lDxLib -lDxUseCLib -ljpeg -lpng -lzlib -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年2月20日(月) 19:32
by beatle
ちなみに,私はコンソールへ情報を出力するのが好きですので,-mwindowsなしでコンパイルしています.
僕のディレクトリ構成は
F:\libraries\dxlib-3.06\include
F:\libraries\dxlib-3.06\lib
F:\libraries\dxlib-3.06\lib-nosr
というように,F:\librariesに色々なライブラリを置くようにしています.

makefileの一例

コード:

TARGET = dxtest.exe
CXXSRCS = main.cpp
CSRCS =
OBJS = $(CXXSRCS:.cpp=.o) $(CSRCS:.c=.o)
BEX = bex
BEXDIR = /home/uchan/workspace/bex/trunk
LIBS = -L/f/libraries/dxlib-3.06/lib -lDxLib -lDxUseCLib -ljpeg -lpng -lzlib -ltheora_static \
       -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath \
       -lgdi32 -L$(BEXDIR) -l$(BEX)
CPPFLAGS = -std=c++0x -I/f/libraries/dxlib-3.06/include -I$(BEXDIR)/include -DDX_GCC_COMPILE -DDX_NON_INLINE_ASM
CXX = g++

.PHONY: all
all: $(TARGET)

.PHONY: clean
clean:
        rm -f $(OBJS)

$(TARGET): $(OBJS)
        $(CXX) $(OBJS) $(LIBS)

$(BEX):
        make -C $(BEXDIR)

MinGWのコンパイラにDXライブラリのヘッダファイルを関連付け?リンク?する方法

Posted: 2012年7月06日(金) 02:34
by HH
自分の潜在的処理能力の限界にぶちあたってしまい放置という結果になってしまいました大変もうしわけございません。
タイトルの開発環境構築について再度ご質問をさせて下さい。

スペック:
 OS:WINDOWS7(64bit)

タイトルの内容なのですが、その前に恐縮ですが基本的な仕様の事を・・・DXライブラリを使用したソースファイルは、C++で記述されているから、拡張子は.cppで合ってますか?

タイトルの内容になるのですが、以前いただいた回答の中に、標準的なものはコンパイルできると思うが、リンカの指定など含めるとmakefileを作る事になる。 とありました。
要するにDXライブラリとMinGWに同じかあるいは似たようなライブラリがある場合だとg++のみのコマンドでコンパイルが可能で、DXライブラリ内の全ての機能を使おうとするとmakefileを作る事になるという解釈で合ってますか?

また、そのmakefileの記述形式など、初心者入門のような分かりやすい解説HPがあれば教えていただけると助かります。

Re: MinGWのコンパイラにDXライブラリのヘッダファイルを関連付け?リンク?する方法

Posted: 2012年7月06日(金) 07:25
by beatle
HH さんが書きました:タイトルの内容になるのですが、以前いただいた回答の中に、標準的なものはコンパイルできると思うが、リンカの指定など含めるとmakefileを作る事になる。 とありました。
要するにDXライブラリとMinGWに同じかあるいは似たようなライブラリがある場合だとg++のみのコマンドでコンパイルが可能で、DXライブラリ内の全ての機能を使おうとするとmakefileを作る事になるという解釈で合ってますか?
DXライブラリの中の関数を1つでも使う場合はDXライブラリをリンク指定しなければなりません。
そもそも、DXライブラリと同じような関数はMinGWには無いと思います。

以下、HHさんの到達度チェック項目
  • GCC(gcc, g++など)を使って、あるC++ソースファイルを「コンパイルだけ」するやり方はご存知でしょうか。
  • GCCを使って、何かのライブラリをリンクするやり方はご存知でしょうか。
  • GCCを使って、コマンドライン引数によってマクロを定義するやり方はご存知でしょうか。
HH さんが書きました:また、そのmakefileの記述形式など、初心者入門のような分かりやすい解説HPがあれば教えていただけると助かります。
検索すればたくさん出てきます。
まとまった情報はGNUのマニュアル GNU Make にあります。
多くの記事は上記チェック項目で挙げたようなコンパイル過程の知識を前提としていますのでご注意ください。
makefileは手動で「gcc hoge.c」のようなコマンドを入力する手間を機械に任せるための方法ですから。

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年7月06日(金) 12:00
by softya(ソフト屋)
MinGWというかgccは文化的に自分で全部書くと言うのが普通です。
IDEとか余分なものがないので軽量なのですから、色々やるにはそれ相応のスキルを要求するわけです。
それが難度が高いとか面倒な人はVisualC++を使うべきだと思います。
HH さんが書きました:タイトルの内容になるのですが、以前いただいた回答の中に、標準的なものはコンパイルできると思うが、リンカの指定など含めるとmakefileを作る事になる。 とありました。
要するにDXライブラリとMinGWに同じかあるいは似たようなライブラリがある場合だとg++のみのコマンドでコンパイルが可能で、DXライブラリ内の全ての機能を使おうとするとmakefileを作る事になるという解釈で合ってますか?
毎回コマンドラインで打ち込んでも良いですがすごく面倒なほど長いコマンドになります。
一度書いてしまえば、更新ソースだけのコンパイルからリンクまで自動的にやってくれるmakefileは非常に便利で直にgccを使う人には避けれないものと思って下さい。
gccのオプションやリンクの仕組み、makefileの書き方を理解することは必須だと思ってもらって良いと思います。

Re: MinGWのコンパイラにDXライブラリのヘッダファイルを関連付け?リンク?する方法

Posted: 2012年7月06日(金) 22:34
by HH
以下、HHさんの到達度チェック項目
  • [1]GCC(gcc, g++など)を使って、あるC++ソースファイルを「コンパイルだけ」するやり方はご存知でしょうか。
    [2]GCCを使って、何かのライブラリをリンクするやり方はご存知でしょうか。
    [3]GCCを使って、コマンドライン引数によってマクロを定義するやり方はご存知でしょうか。

[1]は、オプション?-cをファイル名の後に付け足す 『gcc filename.c -c』 ですよね?
[2]は、GCCを使ってコマンドラインでのライブラリのリンク方法は・・・C言語のソースファイルに、コマンドライン上でDXライブラリのリンクをする方法となると、
具体的な例でいうと『gcc -o filename sourcefile.c aDXlibrary.h bDXlibrary.h ・・・』みたいな感じでしょうか?

[3]は、コマンドライン引数によってマクロの定義・・・・・・コマンドラインからファイルにコマンドライン引数を渡して計算や何かの処理を加えて返す事でしょうか??

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年7月07日(土) 14:32
by HH
softya(ソフト屋) さんが書きました:MinGWというかgccは文化的に自分で全部書くと言うのが普通です。
IDEとか余分なものがないので軽量なのですから、色々やるにはそれ相応のスキルを要求するわけです。
それが難度が高いとか面倒な人はVisualC++を使うべきだと思います。
なるほど。
softya(ソフト屋) さんが書きました:毎回コマンドラインで打ち込んでも良いですがすごく面倒なほど長いコマンドになります。
一度書いてしまえば、更新ソースだけのコンパイルからリンクまで自動的にやってくれるmakefileは非常に便利で直にgccを使う人には避けれないものと思って下さい。
gccのオプションやリンクの仕組み、makefileの書き方を理解することは必須だと思ってもらって良いと思います。
分かりました。確かにぐぐればたくさん出てくるんですが、なんというか、抽象的なことを上げて具体例に出してくれるような、そういうのが自分は分かりやすいんですが、それに正しいとかどうとかの判断もできないので
分かりやすく、且つ正しい 推奨サイトのようなものがあれば教えていただきたかったんですが、どれでもだいたい同じと考えていい感じでしょうか?

Re: WINDOWSソースコードをコンパイルするには?

Posted: 2012年7月07日(土) 15:17
by softya(ソフト屋)
HH さんが書きました:分かりました。確かにぐぐればたくさん出てくるんですが、なんというか、抽象的なことを上げて具体例に出してくれるような、そういうのが自分は分かりやすいんですが、それに正しいとかどうとかの判断もできないので
分かりやすく、且つ正しい 推奨サイトのようなものがあれば教えていただきたかったんですが、どれでもだいたい同じと考えていい感じでしょうか?
gccのオプションもmekefileの書き方も、それだけで一冊の本になるレベルですのでサイトで詳細に解説したのは見たことが無いです。
あとターゲットなるOSやCPUで書き方が大分変わりますので、そういうところも一般的に書けない問題点ですね。
まぁ、オプションもmkefileも書き損なえば思う様な動作をしないので分かると思いますが、分からなかったらココで聞いて下さい。

親切なサイトの情報は少ないと思いますので自分なりにまとめて貰うのが一番かと。
「makefileの入門者用解説ページ」
http://kommy.s254.xrea.com/makefile.php

特にgccオプションはmanを見てもらうとか下記サイトから必要な物を探しだして下さい。
「Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション」
http://www.asahi-net.or.jp/~wg5k-ickw/h ... gcc_2.html
「Man page of GCC」
http://linuxjm.sourceforge.jp/html/GNU_ ... gcc.1.html

こういう所も含めてgccの文化なんですね。

Re: MinGWのコンパイラにDXライブラリのヘッダファイルを関連付け?リンク?する方法

Posted: 2012年7月08日(日) 08:19
by beatle
HH さんが書きました:以下、HHさんの到達度チェック項目
  • [1]GCC(gcc, g++など)を使って、あるC++ソースファイルを「コンパイルだけ」するやり方はご存知でしょうか。
    [2]GCCを使って、何かのライブラリをリンクするやり方はご存知でしょうか。
    [3]GCCを使って、コマンドライン引数によってマクロを定義するやり方はご存知でしょうか。

[1]は、オプション?-cをファイル名の後に付け足す 『gcc filename.c -c』 ですよね?
[2]は、GCCを使ってコマンドラインでのライブラリのリンク方法は・・・C言語のソースファイルに、コマンドライン上でDXライブラリのリンクをする方法となると、
具体的な例でいうと『gcc -o filename sourcefile.c aDXlibrary.h bDXlibrary.h ・・・』みたいな感じでしょうか?

[3]は、コマンドライン引数によってマクロの定義・・・・・・コマンドラインからファイルにコマンドライン引数を渡して計算や何かの処理を加えて返す事でしょうか??
[1]だけ合っております。-cオプションは実はどこにおいてもおっけーです。
[2]において「.h」と書いてるということはヘッダーファイルとライブラリファイルを混同しているようですね。コンパイル・リンクの仕組みをきちんと学んだほうが良いかと思います。
[3]「マクロ定義」というのは要するに

コード:

#define HOGE 10
のようなものです。gccにとあるオプションを渡すと、実際にソースコードに#defineを書かなくとも、好きなマクロを定義できるのです。