[解決済み] CMake出力/ビルドディレクトリ
質問
私は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 内で読み取り専用として扱う必要があります。
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み】CMAKE_MODULE_PATHを指定する必要がある場合、find_package()はどのように使用するのでしょうか?
-
[解決済み] CMake:ユニットテストによるプロジェクト構造
-
[解決済み] CMAKE_CURRENT_SOURCE_DIRとCMAKE_CURRENT_LIST_DIRの相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】CMakeの出力を'bin'ディレクトリにする方法は?