我做cmake。&&全部安装。这可以工作,但是会安装到/usr/local。

我需要安装到不同的前缀(例如,到/usr)。

安装到/usr而不是/usr/local的cmake和make命令行是什么?


当前回答

可省略已接受答案中的“:PATH”部分。下面的语法可能更容易记住:

cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install

...和这里的答案一样。

其他回答

从CMake 3.21开始,你可以使用——install-prefix选项,而不是手动设置CMAKE_INSTALL_PREFIX。

现代版的configure——prefix=DIR && make all install现在是:

cmake -B build --install-prefix=DIR
cmake --build build
cmake --install build

我跨平台构建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

The first two lines create the out-of-source build directory The third line generates the build system specifying where to put the installation result (which I always place in ./project-root/build/stage - the path is always considered relative to the current directory if it is not absolute) The fourth line builds the project configured in . with the buildsystem configured in the line before. It will execute the install target which also builds all necessary dependent targets if they need to be built and then copies the files into the CMAKE_INSTALL_PREFIX (which in this case is ./project-root/build/stage. For multi-configuration builds, like in Visual Studio, you can also specify the configuration with the optional --config <config> flag. The good part when using the cmake --build command is that it works for all generators (i.e. makefiles and Visual Studio) without needing different commands.

之后,我使用安装的文件来创建包或将它们包含在其他项目中…

注意,在CMake和Autotools中,你并不总是需要在配置时设置安装路径。你可以在安装时使用DESTDIR(参见这里),如下所示:

make DESTDIR=<installhere> install

另请参阅这个问题,它解释了DESTDIR和PREFIX之间的微妙差异。

这用于分期安装,并允许将程序存储在与运行位置不同的位置,例如通过符号链接存储在/etc/alternatives中。

然而,如果你的包是可重定位的,并且不需要通过配置阶段设置任何硬编码(前缀)路径,你可以跳过它。 所以不要:

cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install

你会跑:

cmake . && make DESTDIR=/usr all install

注意,正如user7498341所指出的,这不适用于真正应该使用PREFIX的情况。

从CMake 3.15开始,实现这一点的正确方法是使用:

cmake --install <dir> --prefix "/usr"

官方文档

有很多答案,但我想我应该做一个总结来正确地分组并解释它们的区别。

首先,您可以通过以下两种方式之一定义前缀:在配置期间,或者在安装时,这实际上取决于您的需要。

在配置期间

两个选择:

cmake -S $src_dir -B $build_dir -D CMAKE_INSTALL_PREFIX=$install_dir
cmake -S $src_dir -B $build_dir --install-prefix=$install_dir # Since CMake 3.21

在安装期间

优点:如果你想改变它,不需要重新配置。

两个选择:

cmake DESTDIR=$install_dir --build $build_dir --target=install # Makefile only
cmake --install $build_dir --prefix=$install_dir