2009-05-21 10 views
2

私は大きな問題に..私はLinuxのOSでlinux make fileを使って自分のcファイルをコンパイルしました。make --- linuxとwindowsのフォーマット

コマンドプロンプトで同じmakeファイルを使用して、同じファイルをWindowsでコンパイルしたいとします。そのためには、私はnmakeユーティリティとCygwinユーティリティも持っています。

私は...簡単なメイクファイルを使用して簡単なプログラムで正常に

ていることに行っている。しかし、私が、複雑なメイクファイルを使用して、複雑なCファイルを使用していた時にコンパイルすることはできません。

私は、Linuxのmakeファイルの '/'をウィンドウの '\'に変更しましたか?それ以外は変わる?

私は「Windowsに特別なファイルフォーマットを作成していますか?また

その差..

私はそれを必要と本当に思います...

+2

makefileの形式に問題がありますか? あなたのmakefileが、Windows上に存在しないか、何かを実行しようとしているいくつかのLinuxライブラリを参照している可能性があります。 MySQLとのリンクのために、通常は 'mysql_config --libs'を実行してMySQLライブラリのリストを取得します。 – qrdl

+1

NMakeは、さまざまな* nixバージョンがお互いにあるよりも、* nixバージョンのmakeと互換性がありません。 NMakeとmakeの両方で動作するファイルを書くことは可能ですが、いくつかの実際のmakeがWindowsで利用可能であるため、これは価値がありません。 makeが選択されると、残りのコマンドの問題が表示されます。 – RBerteig

答えて

5

残念なことに、nmakeはメイクにゆるやかに触発されており、多くの重要なことは正しくありませんでした。はるかに簡単なことは、両方のプラットフォームで同じ風味を持つことから始めることです。

Linuxでは、Gnu makeがデフォルトの最適なオプションです。

Windowsでは、Gnu makeにはいくつかのソースがありますが、いくつかの選択肢があります。個人的には、私はたいていnative win32 build of Gnu make from the GnuWin32 projectを使用しています。プロジェクトのパッケージの残りの部分については、他のパッケージのいくつかが役に立つと思うかもしれないので、あなたは突き止めたいかもしれません。

代替ソースは、CygwinおよびMinGW32/MSYSです。

Cygwinは、Windowsカーネルの上に* nix互換環境を提供する信頼できる試みです。これは、Windows APIを介して実装された* nix(特にPOSIX)システムコールの膨大な割合をエクスポートするDLLで構成されています。そのDLLには、ディスクマウントに関する独自のアイデアがあり、* nixスタイルのパス名が好きです。 DLL自体はライセンスされたGPL(商用ライセンスが有料で利用可能ですが)であり、Cygwin環境で構築されたプログラムはデフォルトでそれを必要とするため、考慮する必要があります。もう1つの要因は、Cygwinは通常のWindowsユーザーには親切ではないため、Unix以外のユーザーが対処するのが難しくなります。しかし、クロスプラットフォームの開発者にとって、CygwinはあなたのMakefileに必要な通常の疑わしいユーティリティプログラムをすべて手に入れるので本当に便利で、MinGW32ネイティブWindowsターゲットGCCとCygwin環境をターゲットとするGCCが含まれています。

MinGW32は、GCCコンパイラを移植してネイティブのWindows実行ファイルとして動作させることができた移植プロジェクトです。それらが提供するヘッダーファイルと共に使用される場合、現代のWindowsインストールに付属しているCランタイムDLLを介してほぼすべてのWindows APIを使用することができます。

MSYSは、一般的な* nix Makefileによって存在すると思われる最小限のユーティリティセット(* nixシェルで始まる)を含む軽量フォークのCygwinです。 Cygwinとは異なり、MSYSは、デフォルトターゲットがネイティブWindows APIであるように設定されています。

私はここでヒントを得ようとしていますが、おそらく平らであると言わなければならないのは、互換性の問題が使用する方言で終わらないということです。

Makefile言語自体は、使用可能なコマンドシェルに大きく依存しています。そして、最も重要なプロジェクトMakefileは、* nixの多くのcpやrmなどのコアユーティリティを使用して終了します。

私は、GnuWin32ビルドから始めて、MinGW32とMSYSをインストールすることを強くお勧めします。 MSYSとlinuxの両方で動作するMakefileを書くのは比較的簡単で、少数のプラットフォーム固有のロジックしか必要としません。

0

NMAKEは、メイクファイルをお読みください大丈夫、違いはかなりのOSよりもメイクのバージョン間で一般的です。

大きな疑問は、ターゲットプラットフォームが実際にどのようなものか、Windowsでこのコードをネイティブに動作させようとしているのか、それともCygwinで実行しようとしていますか?

+0

ありがとう..私はNMAKE.EXE 1.50を使用しています...私はthatsはproblmだと思う。 また、コマンドプロンプトでPATH = C:\ cygwin \ bin;%PATH%というパスを指定しました。私はそれらの間にフォーマット/構文の違いがあるのか​​知りたいのですか? –

+0

私はnmakeについてよく分かりませんので、下の人のひとりに確認してください。可能であれば、この回答を受け入れた回答を削除し、それを以下のいずれかに適用することをお勧めします。彼らは確かに私よりも受け入れられます。 – Lazarus

0

両方のプラットフォームでgnumakeを使用してください。私がやります。私は何年もVisual Cに触れていません。

1

クロスプラットフォームのCMakeを考慮する必要がありますが、実際の問題は '/'を '\'に変更する必要がないということです。 cygwinまたはmsys(推奨)で実行する場合、これはあなたのために処理する必要があります。

+1

Windowsでは前方スラッシュをディレクトリ区切り文字として解釈するだけでなく、後方スラッシュと解釈するので、(不適切な振る舞いをするプログラムが独自のパスを解析しない限り) "コマンドC:/ some/thing"は "コマンドC:\ some \ thing "となります。 – ephemient

1

NMakeはWindowsツールであり、ウィンドウスタイルのパス、つまりドライブ文字とバックスラッシュを含むパスのみを解析します。したがって、cygwinにGNU Makeをインストールする必要があります。

0

nmakeはWindows自体ではなく独自のフォーマットを持っているので、makefile形式はosではなくmakeメイクに関係しています。単純なものについては、g(nu)makeとnmakeのフォーマットは似ています。

+0

ありがとう...両方のhavと同じ形式ですか? –

+0

は非常に基本的なもの –

関連する問題