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

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

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


当前回答

从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

其他回答

关于布鲁斯·亚当斯的回答:

你的回答会造成危险的混乱。DESTDIR用于 从根树中安装。它能让人看到未来的样子 如果没有指定DESTDIR,则安装在根树中。 PREFIX是实际安装所在的基本目录 的基础。

例如,PREFIX=/usr/local表示最终目的地址 包的/usr/local。使用DESTDIR=$HOME将安装这些文件 就好像$HOME是根目录(/)。如果DESTDIR为/tmp/ DESTDIR,则为1 可以看看'make install'会产生什么影响。本着这种精神,DESTDIR 不应该影响构建的对象。

一个makefile片段解释它:

install:
    cp program $DESTDIR$PREFIX/bin/program

程序必须假定PREFIX是final的基目录 (即生产)目录。符号链接程序的可能性 安装在DESTDIR=/something只意味着程序没有 基于PREFIX访问文件,因为它根本不能工作。猫(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, program .db永远不会被找到,因为它不在预期的位置。

最后,/etc/alternatives实际上不是这样工作的。有 安装在根树中的程序的符号链接(例如vi -> /usr/bin/nvi, Vi -> /usr/bin/vim等)。

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

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

官方文档

从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

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

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

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

注意,在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的情况。