CMAKE_INSTALL_PREFIXの使い方


97

デフォルトの/ usr / localの代わりに/ usrにインストールを作成して、インストールターゲットでMakefileを生成したい。ビルドディレクトリがソースサブディレクトリで実行されていると想定して、次のコマンドを実行します。

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txtには以下が含まれます:CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

今私は実行します:

作る
インストールする

すべてのファイルは引き続きusr / localにインストールされます。なにが問題ですか?

編集:どのCMakeLists.txtプロジェクトファイルにもCMAKE_INSTALL_PREFIXはありません。cmakeを実行する前に、出力ディレクトリからすべてを削除します。CMakeLists.txtのインストールディレクティブは次のようになります。

install(TARGETS mylibrary DESTINATION lib)

回答:



30

この変数を使用する方法は2つあります。

  • Jobが述べたように、それをコマンドライン引数として渡します:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • に値を割り当てるCMakeLists.txt

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    ただし、コマンドをBEFORE PROJECT(< project_name>)コマンドの前に配置することを忘れないでください。そうしないと機能しません。


4
奇妙なことに、SET()ステートメントは、PROJECT()ステートメントの後に配置した場合にのみ機能します(CMake 2.8)。
AstroFloyd

2
この回答とそれがリンクしているリファレンスでは、project()コマンドの問題の前後について直接説明しています。
クレイグスコット

このPROJECTコマンドとは何cmakeですか?その前にこのオプションを設定するにはどうすればよいですか?あなたは例がありますか?
ステファン

6

ただし、PROFECT(<project_name>)コマンドの前に配置することを忘れないでください。そうしないと機能しません。

GNU autotoolsを数年使用した後、cmakeを使用した最初の1週間はまだ学んでいる(m4マクロを書いたほうがよい)が、プロジェクトの設定後に CMAKE_INSTALL_PREFIX 変更するほうがよいと思う。

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
project (BarkBark)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")

最初の実行(キャッシュなし)

CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- The C compiler identification is GNU 4.4.7
-- etc, etc,...
CIP = /usr/local (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

2回目

CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

私が間違っている場合は、教えてください。楽しいです。


SETを実行するときにFORCEを使用してみてください:set(CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.