2017-12-27 11 views
2

WindowsとUnix OSアーキテクチャ用のコマンドラインツールを開発します。しかし、私は闘争に直面しています。 WindowsとUnix間でコードを効果的に転送できるようにするにはどうすればよいですか?Microsoft Visual Studio:WindowsとUnixプロジェクトのソースコードの互換性

プロジェクトは主にMS Visual Studioを使用してC++言語で作成されます。しかし私は私のツールをクロスプラットフォームにしたいので、WindowsとUnixシステムの両方で使うことができます。 UnixはVisual Studioをサポートしていないので、両方のアーキテクチャー(32ビット)とOS固有のヘッダーをサポートするコード構造を幾分設計する必要があります。

私はあなたの助けを求めています。 WindowsとUnixの両方で同じコードを維持する最も効果的な方法と、その特定のOSのすべての必要なヘッダーは何ですか?ですから、Windowsではprogram.exeファイルを、Unixではprogram.runファイルを作成できますか?現在のOSアーキテクチャ(WindowsまたはUnix)をテストし、OS依存のヘッダを含むいくつかの条件はありますか?

エンコードについてはどうですか? WindowsのコマンドラインはMS-DOSエンコーディング(中央ヨーロッパではDOSコードページ852)を使用し、UnixターミナルはUTF-8エンコーディングを使用するためです。私のツールは多言語になります(貢献者は、私の側から英語とチェコ語で始まります)。

できるだけコード構造を小さくする必要があります。ソースコードは、GitHubリポジトリからクローン/フォーク用に利用できるものとする。

これは、スタックオーバーフローに適切な質問ではない場合は、通知して削除します。助けを求めるだけで、他には何もありません。

+0

プロジェクトを生成するために 'CMake'を使い始めます。可能であれば、直接OS機能を使用しないでください。標準のC++を使用してください。いくつかのOS機能が必要な場合は、boostが必要なものを提供しているかどうかを確認してください。コードにgitを使用します。リポジトリのみのソースコードにバイナリや生成されたファイル(プロジェクトファイルなど)を入れないでください。 – drescherjm

+0

ええ、 'cmake'を使ってください。これはVS 2017で現在サポートされており、OS固有のものを作ることなくヘッダの違いを助けます。それが避けられないときは、そのコードをOS抽象化レイヤに入れてください。 – zzxyz

+0

私はVS 2015 Community Editionを持っています。それはCMakeをサポートしていますか? – Polda18

答えて

3

ステップ1)連続した統合システムをセットアップして、WindowsとUnixでコードを最初から作成します。各プラットフォーム上に複数のコンパイラを配置することが望ましい

手順2)sconsまたはcmakeのようなクロスプラットフォーム構築システムを使用してください。

ステップ3)で、すべてのプログラムで任意のプラットフォーム固有のコードを使用しないでください - あなたはを持って際に、様々なifdefガード下の複数のバージョンを実装します。代わりにクロスプラットフォームのライブラリを使用することをお勧めします。

ステップ4)あなたは、プラットフォーム固有のコードを使用して何かを複数回実施していたユニットテストの多く(ビット用特にを持っていることを確認してください)して、CIシステムは、すべてのコミットのためすべてテストを実行することを確認してください。

ステップ5)すべてのテキストが1日目からエンコードされていることを確認してください。は表示レイヤーで発生しますが、内部的にはすべてを清潔に保ちます。

手順6)サポートされているすべてのプラットフォームで大規模な手動テストを行います。

すべてのコンパイラの警告設定を微調整して警告を出し、そのようなエラーをすべて修正してください。あるプラットフォーム上のあるコンパイラでの警告は、別のプラットフォーム上の別のコンパイラを使用してコードを誤って誤ってコンパイルすることがあります。

+0

よろしくお願いします。私のWindowsマシンにCMake 3.10.1をインストールし、それを私のLinux仮想マシンにもインストールしよう... – Polda18

+0

@ Polda18 - Linux VM?私はそれがあなたに利用可能な場合は、Windows 10の 'WSL'機能をチェックアウトしたいと思います。それは... VMと比較して開発には非常に便利です。 VMはうまく動作します。 – zzxyz

+0

@zzxyz - あなたはUbuntu Shellの機能を意味しますか?私のインストールは壊れていて、起動直後にシャットダウンします。修正のためにアンインストールしたくない... – Polda18

0

まず、Windowsコンソールでutf-16は使用できますが、utf-8は使用できません。第二に、標準のC++ライブラリに固執すると、おそらくブーストで拡張されます(これは、Windowsと* nixシステムの両方にインストールする必要があります)。あなたが話している限り、本当に問題はないはずです作業と印刷結果を実行するコマンドライン引数を厳密に受け入れることについて。

端末制御(つまり、次の文字セル以外の画面、特に後方への印刷)について話している場合、これはかなり難しくなります。

ただし、cmakeベースのプロジェクトを使用することをお勧めします.Visual Studioは通常、カスタムmsbuildビルドマネージャを使用します。* nixシステムでビルドしようとすると助けになりません。

関連する問題