cmake は生成されたファイルの場所を設定します - プログラマーが求めた
この記事では主に、cmake の 4 つの変数の違いを分析します。
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
: 静的ライブラリがデフォルトで保存されるフォルダーの場所。CMAKE_LIBRARY_OUTPUT_DIRECTORY
: ダイナミック ライブラリがデフォルトで保存されるフォルダーの場所。LIBRARY_OUTPUT_PATH
: ライブラリ ファイルを保存するデフォルトの場所。生成されたライブラリが静的ライブラリで、CMAKE_ARCHIVE_OUTPUT_DIRECTORY が指定されていない場合は、このディレクトリに保存されます。ダイナミック ライブラリも同様です。CMAKE_RUNTIME_OUTPUT_DIRECTORY
: 実行可能ソフトウェアを格納するディレクトリ。
以上が結論ですが、理解できれば以降の実験は読む必要はありません。理解できない場合は、実験に基づいて理解してください。
.a
プログラムのコンパイル中に Linux によって生成される便利なファイルには、最後にある静的ライブラリ ファイル、.so
最後にある動的ライブラリ ファイル、および実行可能ファイルの 3 種類があります。以下では、スタンドを使用して上記の 4 つの変数の使用法を説明します。
次の構造のフォルダーを構築します:
.
§── CMakeLists.txt §──
アーカイブ
§── fun
│ §── CMakeLists.txt
│ └── fun.cpp
§── ライブラリ
§── 出力
└──ランタイムの内容は次のとおりです。./CMakeListLists.txt
cmake_minimum_required(VERSION 3.1)
project(TEST)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/runtime)
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
add_subdirectory(fun)
fun/CMakeLists.txt
の内容は次のとおりです。
cmake_minimum_required(VERSION 3.1)
project(fun)
add_library(fun fun.cpp)
fun/fun.cpp
の内容は次のとおりです。
int add(int a, int b){return a+b;}
int main(){return 0;}
テストCMAKE_ARCHIVE_OUTPUT_DIRECTORY
-
を実行すると
cmake .; make
、archive
以下にlibfun.a
。 -
./CMakeLists.txt
の3行目をコメントアウトして実行すると、 ;make
のpath
下に。libfun.a
-
の
./CMakeLists.txt
3行目と6行目をコメントアウトして実行するとmake
、fun
以下にlibfun.a
。
テストCMAKE_LIBRARY_OUTPUT_DIRECTORY
- まず、
fun/CMakeLists.txt
の 3 行目を次のように変更します。add_library(fun SHARED fun.cpp)
- 実行すると
make
、ディレクトリ内のファイルがlibrary
表示されます(Mac OSシステムの場合は表示されます)。libfun.so
libfun.dylib
./CMakeLists.txt
の4行目をコメントアウトして実行すると、 ;の下にmake
ファイルが生成されていることがわかります。path
libfun.so
- の
./CMakeLists.txt
4行目と6行目をコメントアウトして実行するとmake
、fun
以下にlibfun.so
。
テストCMAKE_RUNTIME_OUTPUT_DIRECTORY
- まず、
fun/CMakeLists.txt
の 3 行目を次のように変更します。add_executable(exe_file fun.cpp)
- Execute
make
、runtime
以下にexe_file
./CMakeLists.txt
の5行目をコメントアウトして実行し、make
フォルダ配下exe_file
に作成します。fun
上記 3 つの実験を通じて、4 つの変数の役割を理解できるはずです。
著者:FoolishFlyFox
リンク:https://www.jianshu.com/p/599550afd28d
出典:Jianshu
著作権は著者に帰属します。商業的転載の場合は著者に連絡して承認を求め、非商業的転載の場合は出典を明記してください。