CMakeのクロスプラットフォームのC ++プロジェクトの戦闘vs2017使用vs2017 CMakeのクロスプラットフォームのC ++プロジェクトの戦闘使用


           
           
               
               
                                
               
                                                   Windowsプログラマのために、Linuxの開発プログラムにC ++が非常に困難になります、1ない使用済みのメイクファイルは、その構文は非常にぎくしゃくして困難であり、IDE外の対と第二に、その使いやすさと遠対、宇宙最初のIDEがカバーされていません。C ++で結果は他のプログラミング言語とは異なり、プログラマが突然2つのグループはCMakeのまで持っているWindowsとLinuxプログラマーを出産しました。
       大規模なクロスプラットフォームのプロジェクトのために、ソリューションのSLN対生成することができますWindowsで、学生は、非常に精通CMakeのための人気のあるオープンソースのライブラリを持っている必要があり、それは自動的にLinux上でメイクファイルを生成することができます間違いなく最初の選択肢ですが、Linuxプログラマーは、より多くの。メイクに関しては、CMakeの文法がはるかに簡単週パッケージは人生の頂点に、パッケージ化されますです。今、福音はプログラマに、2017年後のVisual Studioは、vs2017は本当に便利、Linuxでコンパイルされ、ウィンドウにプログラムを書くことができます使用して、CMakeの文法をサポートしてきました。現在のバージョンはまだ成熟していないものの、時折そこにエラーの一部のファンであってもよいが、これは私が将来的に信じているものではありませんでしょう。私は本当に一日、私たちはvs2017を使用していたことを願っています。
       ADOは、私が開始するために私のコードの再配置から、戦闘を開始、私の元のコードは、vs2013開発、サードパーティのライブラリのヘッダファイルとライブラリを管理、プログラム間VSプロパティページで管理されています相互依存関係は、参照することによって行われます。図示のように:
 
経営者は、このようなプロジェクトを通じてである対おそらくこれらは、Windowsプログラマに非常に精通しています。ここで私は私のプロジェクトは、Linux上で実行されて移動する方法をステップバイステップを説明します。
まず、プロジェクトディレクトリを確立
[新規]をクリックし、cmakeのを確認したときにvs2017をインストールした場合 - プロジェクトフォルダを作成するには[OK]をクリックし、cmakeのオプション>プロジェクトがあります。
 
それはとてものみ、名前を変更することができない場合、そのステータスは、vsproject対同等であるので、私は、プロジェクト内のフォルダを置くので、cmakeのは、自動的に私たちのために、次の書類を作成し、CMakeLists.txtは、現在のフォルダ構成ファイル内のファイルを管理することです名前、何それ。Cmake_testサブフォルダが自動的に生成され、私はそれを削除し、その名前の私のルートディレクトリを置くつもりはありません。
 
SRCのルートディレクトリに自分のソースコードファイルを作成し、CMakeLists.txtを追加
 
プロジェクト全体を書き込むように構成することができ、ルートディレクトリCMakeList.txtを開きます。
 
最小バージョンエラー下に使用する場合、cmakeのの最小バージョンを設定するために使用cmake_minimum_required。プロジェクト全体の名前を設定するためのプロジェクトでは、管理するために使用add_subdirectoryサブディレクトリには、ここではミックスに追加するには、一つだけのサブディレクトリSRCを持っています。cmakeの構文では大文字と小文字を区別しません、他の相と区別するために、ここでの文法は大文字で統一されています。setコマンドは、多くの場合、セットの変数に使用され、CMakeの自身が事前に定義された変数の数を持っている、あなたは通常、それ以上のサードパーティのライブラリの検索に使用されている検索ディレクトリの.cmakeファイルへのポイントCMAKE_MOULE_PATHとして、セットを介してそれらに値を割り当てることができますまた、このようなCMAKE_SOURCE_DIRがルートディレクトリを指しているように、これはサードパーティのライブラリ検索ファイルディレクトリとしてルートディレクトリのフォルダ内のcmakeのファイルで、デフォルト値を持っています。
第二に、ソースコードが付加され
移行のソースコードのサブフォルダSRC、新規フォルダのプロジェクトを押してください
 
次のようにcmakeのコードがあるフォルダ内のソースコードファイルにCMakeList.txtフォルダSRC:
 
非常に単純な、各サブプロジェクトのソースフォルダは、ミックスに追加することができます。各プロジェクト内の.h対、の.cpp cmakeのサブプロジェクトをフォルダにコピーされ、その中に作成CMakeLists.txt
 
このプロジェクトの管理の下でそのフォルダには、ソースコードファイルの下にあるCMakeLists.txt
 
プロジェクトはプロジェクトの名前で、FILEは、その役割は、すべてのcppファイルはbase_src変数内に格納されたファイル操作コマンドは、GLOBオプションは、クエリ式に一致するすべてのファイルのファイルリストを生成しますし、リストを変数に格納されています変数、あなたがGLOBを指定しない場合、我々はすべてのcppを来なければならない列挙されている、と我々はすべてのcppコンパイラに関与している一般場合、GLOBの使用に含まれているが、その上に来ます。ADD_LIBRARY主な役割は、リンクファイルを作成するには、ソースファイルを指定することで、その後、一般的なコマンド構文をプロジェクトに追加し、次のとおりです。
add_library(<名前> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [ソース1] [ソース2] [...])
<名前>は、ライブラリファイルの名前を表し、ライブラリファイルは、コマンドにリストされたソースファイルから作成されます。STATIC、SHARED、モジュールの役割は、タイプライブラリファイルを生成するために指定されています。静的ライブラリは、他の目標時間へのリンクを使用して、ターゲット・ファイルのアーカイブファイルです。共有ライブラリを動的(ダイナミックリンクライブラリ)リンクされている、それは実行時にロードされます。モジュールは、ライブラリは、プラグイン内の他のオブジェクトにリンクされることはありませんが、実行時に機能dlopen-シリーズを使用することができます。デフォルトでは、ライブラリが作成されたディレクトリツリーを構築するためのソースファイルディレクトリツリーの場所になり、コマンドはここに呼び出されます。
ADD_LIBRARY($ {PROJECT_NAME} SHARED $ {base_src})
ここで$は通常、この構文はタッチと同じ対変数を参照するために使用されるベース、あるプロジェクト名は、$ {PROJECT_NAMEを}されます。base_srcはちょうどので、私のプロジェクトのソースファイルのリストがSHAREDでので、ここで、ダイナミックリンクライブラリですされています。
ほぼすべてのプロジェクトは、このような文があり、VC ++ディレクトリ機能対のようなものですセットヘッダファイルのディレクトリ検索に使用INCLUDE_DIRECTORIES。
これは、事前に定義されたデフォルト、輸出へのセットは、クラスや関数に署名しなければならない、とLiunxはこれを実行する必要はありません、我々は通常、エンジニアリング対で、マクロによって制御することができ、時にダイナミックリンクライブラリ我々は通常のウィンドウで設定した、ことは注目に値しますマクロ_WINDOWSをコンパイルし、これは通常、WindowsプラットフォームとLinuxの制御を取ることができます。
 
ADD_DEFINITIONSでCMakeLists.txt(-DBASE_EXPORTS)は、輸出のシンボルと設定するには、WindowsプラットフォームにセットBASE_EXPORTSにこのマクロです。
第三に、サードパーティのライブラリの設定
我々は、それはまた、より強力な検索機能を持ち、一般的な方法は、プロジェクトファイル、cmakeのを書くことで対通常、オープンソースのライブラリの多くを使用して、あまりにも、CMakeLists.txtファイルが書き込まれるプロジェクトを行っています、あなたは、サードパーティのライブラリへの絶対パスを指定する必要はありません。私はちょうどLog4cppライブラリ、サードパーティを利用するにはログインが動作しますが、私はそれを設定する方法を示します。CMakeLists.txtログサブプロジェクトファイルに新しいフォルダ、その内容は以下のとおりです。
 
TARGET_LINK_LIBRARIESは、このプロジェクトでは、コマンド他の作品の設定に依存し、ここで作品に対に相当し、その依存性ベースのプロジェクトを、引用し、CMakeのは、プロジェクト間のプロジェクトに係る配列依存セットを生成します。
FIND_PACKAGEは、それが最初のモジュールパスにFind.cmakeを探します、サードパーティのライブラリを見つけるために使用され、これはFindLog4cpp.cmakeを見つけることです、モジュールパスがCMAKE_MOULE_PATHことを指定されています。
 
.cmakeファイルが実際にcmakeの文が書かれている、あなたはそれを使用することはできません、彼はCMakeLists.txt年に書いたが、それは、よりクリーンでクリアな存在だろう書きました。通常より人気のあるサードパーティ製のライブラリFind.cmakeファイルが手に持っていない、あなたは常にオンラインにそれを見つけることができます。私はすべてのかもしれないの使用サードパーティのライブラリFind.cmakeはここに置かれます。
IF(Log4cpp_FOUND)
    INCLUDE_DIRECTORIES($ {Log4cpp_INCLUDE_DIR})
    TARGET_LINK_LIBRARIES($ {PROJECT_NAME} $ {Log4cpp_LIBRARY})
ELSE()
    MESSAGE(STATUSが"NOT FINDのlog4cpp LIBRARYをCAN")
Log4cpp見つけ、Log4cpp_FOUNDがtrueに割り当てられますならば、それは本当にです依存関係として同時にLog4cpp_INCLUDE_DIR検索パス、Log4cpp_LIBRARYを加えた変数、内部FindLog4cpp.cmake。タリアは、外部から設定する必要があります。あなたはエラーメッセージが出力されますが見つからない場合、また、多くの場合、短期的に、非常に便利です、デバッグ情報を印刷するために使用されます。オープンFindLog4cpp.cmakeは見てみましょう:
 
あなたは構文の外部と内部を見ることができることはまったく同じです。
VS2017コンパイルCMakeのプロジェクトでは第四に、
CMakeのを使用するすべてのノウハウ、Windows上でcmakeのでSLNを生成するとき、それはつまり、サード・パーティ・ディレクトリに設定しますが、そのような変数代入とLog4cpp_INCLUDE_DIR第3四半期に、割り当てが成功すると、それがプロジェクトディレクトリ対さまざまなバージョンを生成することができますSLNファイルは、それをコンパイルします。
 
vs2017では、彼らはそれを生成SLNを設定するには、その後、サードパーティのディレクトリを直接開いCMakeLists.txtを、サポートしてきました。CMakeSettings.jsonファイルを生成しますその後、ルートディレクトリに、「設定cmakeの」を選択CMakeLists.txtルートディレクトリで右クリックし、CMakeLists.txtはここに書くことができる構成で使用しました。
 
これは、buildRootはSLNビルドディレクトリです。CMakeの変数は代入で使用される変数のために使用されています。ここで私は、いつもの練習と違いはありませんルートディレクトリTHIRD_PARTYフォルダに配置されているサードパーティのライブラリの結果をまとめました。
 
変数が正しく設定された後、CMakeのプロジェクトは、vs2017成功にコンパイルすることができます。他のデバッグおよび非CMakeのプロジェクトのような違いはありません。
Linux上でのV.のコンパイル
我々は唯一のLinux上でコンパイルを残して、Windowsのコードに何らかの形である場合。Windowsのより強力なサードパーティのライブラリのLinux管理は、人気のあるライブラリは、sudoのapt-getをインストールすることができ、インストール入力します。私はそれが問題で、ウィンドウのみとは異なり、単に罰金をコンパイルした後に直接ダウンロードするだけでなく、コンパイルにSLNを生成する必要はありません見つけることができません。また、例えばLog4cppに、githubのから良いをダウンロードした後、次のコマンドを入力します。
CDのlog4cpp
mkdirビルド
cmakeの..
メイク
make installを
Log4cppは上にインストール
 
結果は、通常は/ユーザーに配置されているコンパイル/そうFindCMakeが直接検出された使用、フォルダのように下に/ユーザー/ローカル/ユーザが含まれます。サードパーティ製のライブラリにすべての良いをダウンロードした後、ルートディレクトリのフォルダに、次のようなコマンドを入力します。
CDのlog4cpp
mkdirビルド
cmakeの..
メイク
完了
----------------
免責事項:この記事は、元の記事のCSDNブロガー「空気の愛の男」で、CC 4.0 BY-SAの著作権契約、複製、元のソースのリンクを添付してくださいに従ってくださいそしてこの文。
オリジナルリンクします。https://blog.csdn.net/qingcaichongchong/article/details/86493146

おすすめ

転載: www.cnblogs.com/lvdongjie/p/12513838.html