cephコンパイルの最適化レベルと、実行時にライブラリをロードするターゲットは、link.txtで指定されています。(レコードライブラリhttps://blog.csdn.net/bandaoyu/article/details/113181179 )
Makefile
詳細なMakefileルールチュートリアル:https://blog.csdn.net/liang13664759/article/details/1771246
これは非常に単純なcmakeエントリブログです:CMakeList.txtの書き方 https://www.cnblogs.com/cv-pr/p/6206921.html
cmake
クロスプラットフォームのコンパイル管理ツール。主な機能は、実際にはルールに従ってMakefileを自動的に生成し、makeコマンドを使用してコンパイルおよびリンクすることです。
cmakeを使用するには、次の手順が必要です
。1.CMakeList.txtファイルを作成します。2。Makefile
、mkdir build && cd build && cmake ../ CMakeList.txtを生成します。cmakeによって生成されるディレクトリファイルは多数あるため、通常、ビルドディレクトリが配置用に作成されます。
3. makeコマンドを実行して、プロジェクトをコンパイルおよびリンクします。
cmakeによって生成されたディレクトリの結果はおおよそ次のとおりです。
├──ビルド
│├──CMakeCache.txt
│├──CMakeFiles
││├──3.2.2
│││├──CMakeCCompiler.cmake
│││├──CMakeCXXCompiler.cmake
│││├──CMakeDetermineCompilerABI_C。ビン
│││├──CMakeDetermineCompilerABI_CXX.bin
│││├──CMakeSystem.cmake
│││├──CompilerIdC
││││├──のa.out
││││└──CMakeCCompilerId.c
│││└ ──CompilerIdCXX
│││├──のa.out
│││└──CMakeCXXCompilerId.cpp
││├──cmake.check_cache
││├──CMakeDirectoryInformation.cmake
││├──CMakeOutput.log
││├── CMakeTmp
││├──feature_tests.bin
││├──feature_tests.c
││├──feature_tests.cxx
││├──Makefile2
││├──Makefile.cmake
││├──progress.marks
││├─ ─TargetDirectories.txt
││└──test_sqrt.dir
││├──build.make
││├──C.includecache
││├──cmake_clean.cmake
││├──DependInfo.cmake
││├──依存.Internalインタ
││├──depend.make
││├──flags.make
││├──link.txt
││├──progress.make
││└──SRC
││├──BCO
││└─ ─main.co
│├──cmake_install.cmake
│├──のMakefile
│└──test_sqrt
├──CMakeLists.txt
├──含ま
│└──BH
└──SRC
├──BC
└──のmain.c
cmakeを使用してcephをコンパイルします
以前にcephを学習していたとき、printステートメントを追加するなど、コードを変更したかったのです。これは問題ありません。対応するモジュールを直接再作成するだけです。たとえば、rbdモジュールの関連ファイルを変更する場合は、makerbdを実行するだけです。ただし、ファイル、モジュール、またはツールを追加する場合、処理は簡単ではありません。Makefileには関連するファイル情報がないため、つまりmakeを実行しても、新しく追加されたモジュールはコンパイルされません。
しかし、cmake以降ははるかに簡単です。新しく書き込んだモジュールファイルをCMakeList.txtに直接追加して、作成することができます。これはcephプロジェクト全体に基づいているため、ヘッダーファイルのインクルードパスは、ceph / srcに従ってプロジェクトのルートディレクトリとしてインポートできます。同時に、グローバルリンクの依存関係の問題を気にする必要はなく、cephの書き込みを直接模倣するだけです。
まず、以下に示すように、cephCMakeList.txtの構造を説明します。プロジェクトのルートディレクトリに合計CMakeList.txtファイルがあり、add_subdirectoryステートメントを使用して、指定したフォルダーをレイヤーごとに含め、すべてのCMakeList構成を検索します。したがって、cephソースコードを変更する場合は、このモジュールの下のCMakeList.txtを変更するだけで済みます。
├──CEPH-ルート
│├──ビルド
││├──...
│├── CMakeLists.txt
│├──SRC
││├──CMakeLists.txt
││├──ツール
│││ ├─ ─CMakeLists.txt
││├──OSD
│││├──CMakeLists.txt
││├──月
│││├──CMakeLists.txt
│││...について
の例は、我々はコマンドラインを追加したいですツール、src / tools /ディレクトリに、demoという新しいディレクトリが作成されます。このプロジェクトは何もせず、boost-pragram_optionを使用してコマンドラインを解析してから、パラメーター値を出力します。手順は次のとおりです。
#include <boost/program_options.hpp>
#include <iostream>
using namespace std;
namespace po = boost::program_options;
int main(int args, char** argv){
try {
po::options_description generic("Generic Options: ");
generic.add_options()
("help", "help message")
("version,v", "print procedure version");
int opt = 5;
po::options_description ha("haha Options: ");
ha.add_options()
("opt", po::value<int>(&opt)->default_value(10), "optimize value");
po::options_description cmdline_options;
cmdline_options.add(generic).add(ha);
po::variables_map vm;
po::store(po::parse_command_line(args, argv, cmdline_options), vm);
po::notify(vm);
if (vm.count("help")){
cout << cmdline_options << endl;
return 1;
}
cout << "vm opt = " << vm["opt"].as<int>() << endl;
cout << "no opt = " << opt << endl;
}
catch(exception& e) {
}
catch(...) {
}
cout << "haha!" << endl;
return 0;
次に、demo /ディレクトリの下に新しいCMakeList.txtファイルを作成し、ファイルにいくつかの単語を書き込みます。
set(demo test.cc)
add_executable(demo ${demo})
target_link_libraries(demo global
${BLKID_LIBRARIES} ${CMAKE_DL_LIBS})
次に、上位ディレクトリのCMakeList.txtでデモファイルにマークを付けます。
...
add_subdirectory(demo)
...
次に、root / buildディレクトリに戻り、cmake ..を実行すると、Makefileが再生成され、make demoを実行すると、実行可能ファイルbuild / bin / demoが見つかります。実行は出力になります:
@ ./bin/demo --help
Generic Options: :
--help help message
-v [ --version ] print procedure version
haha Options: :
--opt arg (=10) optimize value
この例によれば、librados、librbdなどのライブラリまたは関数を参照してから、同じ方法でひょうたんを描画し、独自のツールをコンパイルできます。
元のリンク:https://blog.csdn.net/hedongho/article/details/79993098
ダイナミックライブラリの依存関係を追加する
vi ceph-L/src/osd/CMakeList.txt
target_link_libraries(osd so_libname)
osd:可执行程序名
so_libname:共享库名