CMAKE_INSTALL_PREFIX设置不生效,awesome WM源码安装路径异常
我之前在源码安装awesome的时候也碰到过一模一样的问题——明明指定了CMAKE_INSTALL_PREFIX,但部分资源文件还是跑到/usr/local/share去了。这是因为awesome的CMake配置里,有些数据文件的安装路径默认依赖于CMAKE_INSTALL_DATADIR变量,而这个变量有时候不会自动完全继承你设置的前缀,给你几个靠谱的解决方法:
1. 先确认变量是否正确传递
首先你可以先验证cmake是否正确接收了你的前缀设置,执行以下命令查看所有配置变量:
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -LA
在输出里找CMAKE_INSTALL_PREFIX和CMAKE_INSTALL_DATADIR这两个变量,如果CMAKE_INSTALL_DATADIR显示的是share而不是${PREFIX}/share,那就是问题所在——它默认会拼到CMAKE_INSTALL_PREFIX后面,但如果之前有缓存的旧配置,可能会出错。
2. 手动强制指定数据安装路径
直接在cmake命令里额外指定数据目录的变量,强制让所有资源文件安装到你的前缀路径下。修改后的cmake命令可以是:
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_DATADIR=${PREFIX}/share
如果想要更精准地控制awesome的专属资源路径,也可以直接指定它的专用变量:
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DAWESOME_DATADIR=${PREFIX}/share/awesome -DAWESOME_MANDIR=${PREFIX}/share/man
3. 清理缓存后重新构建
之前的build目录可能已经缓存了旧的配置信息,导致新的变量设置不生效。先彻底清理build目录再重新构建:
rm -rf build && mkdir build && cd build # 然后执行修改后的cmake命令 cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_DATADIR=${PREFIX}/share make && make install
4. (可选)手动调整CMakeLists.txt(不推荐)
如果上面的方法都不行,你可以进入awesome源码根目录,打开CMakeLists.txt,搜索/usr/local/share相关的硬编码路径,把它们替换成${CMAKE_INSTALL_DATADIR}或者${CMAKE_INSTALL_PREFIX}/share。不过这个方法需要修改源码,后续更新版本还要重新改,所以优先用前面的变量覆盖方法。
内容的提问来源于stack exchange,提问作者saga

