こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++(VS)でコンソールアプリ(複数ファイルからなる)を作成したい

マイクロソフト社のVC++(Visual Studio 2008)で
コンソールアプリケーションを作成しようとしております。
ファイルは複数ファイルからなり、
mainprogram.cpp -> 実行ファイル(mainprogram.exe)
subprogram1.cpp -> オブジェクトファイル(subprogram1.obj)
subprogram2.cpp -> オブジェクトファイル(subprogram2.obj)
・・・以下続く
のように
1)サブプログラムをobjファイルとしてコンパイル
2)メインプログラムをコンパイルしてobjファイルとリンクし、
  実行ファイルを作成する
というような作業を行いたいと考えております。

以前はLinuxの環境でg++、makeを利用して
このような構成のコンソールアプリケーションを作成しておりました。
が、VCに移行するに当り、どのようにプロジェクトファイル等を
構成して良いか分からず、出だしでつまづいております。

VCにもコマンドラインでコンパイルする方法
(cl, nmakeを使うんでしょうか。。。)があるみたいですが、
これらの手法について書かれている
書籍、サイト等を探すことが出来ないでおります。

VCに関して、このような使用法に対する解説がなされている書籍、
もしくはサイト等をお教え願えませんでしょうか?

宜しくお願い申し上げます。

投稿日時 - 2009-02-26 18:08:18

QNo.4751352

困ってます

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

http://www.soft-cc.com/Basic/MakeProject.html

----------
5.次にソリューションエクスプローラーの
ソースファイルというフォルダを右クリックして、
[追加] → [新しい項目の追加]
を選択し、C++ファイルを追加します。
追加されたファイルにプログラムを記述していきます。
----------
を、必要なだけ繰り返します。

1回目は「mainprogram.cpp」で、2回目以降は「subprogram○.cpp」で追加して下さい。

プロジェクトをビルドすると、すべてのソースがコンパイルされ

mainprogram.cpp -> オブジェクトファイル(mainprogram.obj)
subprogram1.cpp -> オブジェクトファイル(subprogram1.obj)
subprogram2.cpp -> オブジェクトファイル(subprogram2.obj)

となり、すべてのオブジェクトファイルが無事に生成されると

mainprogram.obj
subprogram1.obj
subprogram2.obj
上記以外の必要なライブラリ

がリンカによって結合され

実行ファイル(project1.exe)

が出来上がります。出来上がる実行ファイルの名前は、自動的にプロジェクト名と同じになります(この例ではプロジェクト名を「Project1」にした)

因みに
>mainprogram.cpp -> 実行ファイル(mainprogram.exe)
>subprogram1.cpp -> オブジェクトファイル(subprogram1.obj)
>subprogram2.cpp -> オブジェクトファイル(subprogram2.obj)
という解釈は誤りです。上記のように

mainprogram.cpp -> mainprogram.obj
subprogram1.cpp -> subprogram1.obj
subprogram2.cpp -> subprogram2.obj

と言う段階と

mainprogram.obj + subprogram1.obj + subprogram2.obj + ライブラリファイル -> project1.exe

と言う段階と、2つあります。

>mainprogram.cpp -> 実行ファイル(mainprogram.exe)
というように「メインプログラムがいきなり実行ファイルになる訳じゃない」ので注意しましょう。出来上がる実行ファイルも、メインプログラムのファイル名とは別の名前になります。

更に言うと、VC++(Visual Studio 2008)は、メインプログラムとサブプログラムとを区別しません。どれも平等に扱います。

どれも平等に扱うので、メインとなるソースファイルが何番目にあっても構いません。

メイン/サブの区別は、人間が勝手に「main関数があるソース」と「main関数が無く、別の関数があるソース」を区別して呼んでいるだけに過ぎません。

コンパイラは、単に「ライブラリファイルの中にあるスタートアップルーチンを実行ファイルのエントリポイントとして実行ファイルを作るだけ」です。

そして「ライブラリファイルの中にあるスタートアップルーチンに、main関数をコールしている記述がある」ので、人間の目には「main関数からプログラムが開始される」ように見えるだけです。

そして人間は「main関数からプログラムが開始されるので、それがメインだ」と思い込んでいるに過ぎません。

投稿日時 - 2009-02-27 11:20:37

お礼

どうもありがとうございます。
お礼が遅くなりすみません。
ここまで詳しく解説していただきありがとうございます。
参考どころかほとんど答えを教えていただき、
恐れ入ります。
早速試してみます。
どうもありがとうございます。

投稿日時 - 2009-02-28 12:35:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

統合環境で作るなら, プロジェクトを作るときにコンソールアプリケーションを選んでおいて, 必要なファイルを全部追加すればいいだけじゃないかな.
コマンドラインでコンパイルするなら, コンパイラについてはヘルプを見ながらちまちまとオプションをおきかえるだけ. むしろ GNUmake から nmake への移行の方が面倒だけど, 「普通の Makefile」なら $^ を $** に置き換えることだけ気をつければ大体コンパイラオプションの置き換えだけですむ. ただし「普通じゃない Makefile」だと修正不可能なこともあるので, その場合は Cygwin をインストールするとか頑張って Makefile を全部書き直すとかすることになる.
いずれにしても, MSDN は確認した方がいいと思う.

参考URL:http://msdn.microsoft.com/ja-jp/library/default.aspx

投稿日時 - 2009-02-26 18:42:25

お礼

早速ありがとうございます。
お礼が遅くなりましてすみません。
なるほど、やはり面倒くさがらずにヘルプを読みながら、
というのが基本なのですね。
MSDNも新しい関数の使い方なんかを知るためには
見たりしてたのですが、
ちゃんと探すと今回のケースのような情報も載っているんですね。
どうもありがとうございました。

投稿日時 - 2009-02-28 12:31:32

あなたにオススメの質問