私はcmake . && make all install
をします。これは動作しますが、/usr/local
にインストールされます。
別のプレフィックスにインストールする必要があります(たとえば、/usr
に)。
/usr
の代わりに/usr/local
にインストールするcmake
およびmake
コマンドラインは何ですか?
コマンドラインでCMake変数を渡すか、ccmake/cmake-guiを使ってキャッシュされた変数を編集することができます。コマンドラインで、
cmake -DCMAKE_INSTALL_PREFIX:PATH =/usrすべてインストールする
プロジェクトを設定し、すべてのターゲットをビルドして/ usrプレフィックスにインストールします。タイプ(PATH)は必ずしも必要ではありませんが、Qtベースのcmake-guiにディレクトリ選択ダイアログを表示させるでしょう。
コメントとしてのいくつかの小さな追加は、単純な等価物を提供することがいくつかのために十分ではないことを明らかにします。ベストプラクティスは、外部のビルドディレクトリを使用することです。つまり、ソースを直接使用するのではありません。ジェネレーターを抽象化した、より一般的なCMake構文を使うためにも
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX:PATH =/usr .. && cmake --build。 --target install --configリリース
あなたはそれがかなり長くなるのを見ることができます、そしてもう直接同等ではありません、しかしかなり簡潔な形でベストプラクティスに近いです... --configはマルチコンフィギュレーションジェネレータ(すなわちMSVC)によってのみ使用され、無視他人によって。
受け入れられた回答の ":PATH"の部分は省略することができます。この構文はもっと記憶に残るかもしれません:
cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install
...ここで答え で使われているように 。
CMakeと Autotools の両方で、設定時に常にインストールパスを設定する必要はないことに注意してください。次のように、インストール時に DESTDIR を使用できます( here も参照)。
make DESTDIR=<installhere> install
この質問 も参照してください。これはDESTDIRとPREFIXの微妙な違いを説明しています。
これは、段階的なインストールを目的としており、プログラムが実行されている場所とは異なる場所にプログラムを保存できるようにします。 /etc/alternatives
シンボリックリンク経由。
ただし、パッケージが再配置可能であり、configureステージを介して設定されたハードコーディングされた(プレフィックス)パスを必要としない場合は、(スキップできます)代わりに:
cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install
あなたは実行します:
cmake . && make DESTDIR=/usr all install
User7498341が指摘しているように、これは本当にPREFIXを使用する必要がある場合には適切ではないことに注意してください。
私がプラットフォーム間でCMakeプロジェクトを構築する方法は以下のとおりです。
/project-root> mkdir build
/project-root> cd build
/project-root/build> cmake -G "<generator>" -DCMAKE_INSTALL_PREFIX=stage ..
/project-root/build> cmake --build . --target=install --config=Release
./project-root/build/stage
に置きます - 絶対パスでなければ、パスは常にカレントディレクトリからの相対パスと見なされます)。.
で構成されたプロジェクトをビルドします。必要な場合はすべての必要な依存ターゲットもビルドしてからCMAKE_INSTALL_PREFIX
(この場合は./project-root/build/stage
)にコピーするinstall
ターゲットが実行されます。VisualStudioのような複数構成ビルドの場合は、次のように指定することもできます。オプションの--config <config>
フラグを持つ設定.cmake --build
コマンドを使用するときの良いところは、異なるコマンドを必要とせずにすべてのジェネレータ(つまりmakefileとVisual Studio)に対して機能することです。その後、インストールしたファイルを使ってパッケージを作成したり、他のプロジェクトに含めたりします。
ブルースアダムスの答えについて:
あなたの答えは危険な混乱を引き起こします。 DESTDIRはルートツリーからインストールするためのものです。 DESTDIRを指定しなかった場合、ルートツリーに何がインストールされるのかを見ることができます。 PREFIXは、実際のインストールのベースとなるベースディレクトリです。
たとえば、PREFIX =/usr/localは、パッケージの最後の宛先が/ usr/localであることを示します。 DESTDIR = $ HOMEを使用すると、$ HOMEがルート(/)であるかのようにファイルがインストールされます。もしDESTDIRが/ tmp/destdirだとしたら、 'make install'がどのような影響を与えるかを見ることができます。その精神では、DESTDIRは構築オブジェクトに決して影響を与えるべきではありません。
それを説明するためのメイクファイルセグメント:
install:
cp program $DESTDIR$PREFIX/bin/program
プログラムはPREFIXが最終(すなわち本番)ディレクトリのベースディレクトリであると仮定しなければなりません。 DESTDIR =/somethingにインストールされたプログラムにシンボリックリンクを作成する可能性があるのは、単にそのプログラムがPREFIXベースのファイルにアクセスしないことを意味します。 cat(1)は(最も単純な形式では)どこからでも実行できるプログラムです。これはそうではない例です:
prog.pseudo.in:
open("@prefix@/share/prog.db")
...
prog:
sed -e "s/@prefix@/$PREFIX/" prog.pseudo.in > prog.pseudo
compile prog.pseudo
install:
cp prog $DESTDIR$PREFIX/bin/prog
cp prog.db $DESTDIR$PREFIX/share/prog.db
$ PREFIX/bin/prog以外の場所からprogを実行しようとした場合、prog.dbは予期された場所にないため、検出されません。
最後に、/ etc/alternativesは実際にはこのようには機能しません。ルートツリーにインストールされたプログラムへのシンボリックリンクがあります(例:vi - >/usr/bin/nvi、vi - >/usr/bin/vimなど)。
CMakeを使用する場合、実際のジェネレータを(例えばmake
を介して)呼び出すことは悪い習慣と考えられています。このようにすることを強くお勧めします。
設定フェーズ:
cmake -Hfoo -B_builds/foo/debug -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX=/usr
ビルドフェーズとインストールフェーズ
cmake --build _builds/foo/debug --config Debug --target install
この方法に従うと、ジェネレータ固有のコマンドを覚えなくても、ジェネレータを簡単に切り替えることができます(例:Ninjaの_ -GNinja
)。