1. ホーム
  2. c++

[解決済み] CMake出力/ビルドディレクトリ

2022-03-07 13:34:56

質問

私はCMakeのかなり新しいユーザーで、その使用方法に関するいくつかのチュートリアルを読み、3つの異なるコンパイラ用のプログラムを作成するために、いくつかの複雑な50行のCMakeスクリプトを書きました。これはおそらくCMakeの私のすべての知識を終了します。

今、私の問題は、いくつかのソースコードがあり、そのフォルダをプログラムを作るときに触りたくない、またはいじりたくないということです。私は、すべてのCMakeと make の出力ファイルやフォルダは ../Compile/ ということで、CMakeスクリプトの変数を少し変更しました。ラップトップでこのようなことをすると、しばらくはうまくいきました。

Compile$ cmake ../src
Compile$ make

これで、今いるフォルダにきれいな出力ができました。まさに私が求めていたものです。

今、別のコンピュータに移動して、CMake 2.8.11.2を再コンパイルしたら、ほとんど振り出しに戻りました それは、常に、そのことをコンパイルして src フォルダに、私の CMakeLists.txt が配置されています。

CMakeスクリプトでディレクトリを選択する部分は、こうなっています。

set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/)
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir})
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})
set(CMAKE_BINARY_DIR  ${dir})
SET(EXECUTABLE_OUTPUT_PATH ${dir})
SET(LIBRARY_OUTPUT_PATH ${dir}lib)
SET(CMAKE_CACHEFILE_DIR ${dir})

で必ず終わるようになりました。

-- Build files have been written to: /.../src

何か見逃していませんか?

解決方法は?

設定する変数をすべて設定する必要はほとんどありません。CMakeはそれらを合理的なデフォルトに設定します。あなたは間違いなく ではなく を修正します。 CMAKE_BINARY_DIR または CMAKE_CACHEFILE_DIR . これらは読み取り専用として扱われます。

まず、srcディレクトリから既存の問題のあるキャッシュファイルを削除します。

cd src
rm CMakeCache.txt
cd ..

次に、すべての set() コマンドを実行してください。

cd Compile && rm -rf *
cmake ../src

CMake を実行するときにソースディレクトリの外にいる限り、CMakeList が明示的に指示しない限りソースディレクトリを変更することはありません。

一旦これが動作すると、CMake がデフォルトでどこに物を置くかを見ることができ、デフォルトの場所に満足できない場合のみ(例えば EXECUTABLE_OUTPUT_PATH ) 必要なものだけを修正します。そして、それらを CMAKE_BINARY_DIR , CMAKE_CURRENT_BINARY_DIR , PROJECT_BINARY_DIR などです。

CMakeのドキュメントを見ると、変数がセマンティックセクションに分割されているのを見かけます。ただし 非常に 特別な状況では、quot;情報を提供する変数" にリストされているものはすべて、CMakeList 内で読み取り専用として扱う必要があります。