Ubuntu Cmake版本更新

cmake通过bin生效,改变版本时通过软链接指向另一版本即可:

  1. cmake官网下载cmake-3.29.2.tar.gz,然后解压:

    1
    sudo tar -xvzf cmake-3.29.2.tar.gz

  2. 配置编译和安装:

    1
    2
    3
    sudo ./configure
    sudo make -j8
    sudo make install

此时cmake --version有可能输出新版本,也有可能保留旧版本,关键是/usr/bin/cmake的版本是什么,这里需要建立一个软链接,不要使用相对路径创建:

1
2
sudo rm /usr/bin/cmake
sudo ln -s /home/user/Desktop/cmake-3.29.2/bin/cmake /usr/bin/cmake

ubuntu下boost安装/版本更新

查看版本:

1
dpkg -S /usr/include/boost/version.hpp

卸载:

1
sudo apt-get autoremove libboost1.74-dev

网上一些教程最推荐的是直接使用软件源安装:

1
2
sudo apt-get update
sudo apt-get install libboost-all-dev

但是如果软件源有版本冲突,而且比较旧,容易安装到旧版本的boost,这里可以使用自己编译安装,首先确认boost安装版本,这里主要考虑的是编译工具问题,例如我的gcc version 12.2.0是装不了boost 1.87的,选择了1.79,从官网下载tar包:

先下载boost的一些重要依赖,主要是编译工具和一些基础依赖,没有这些依赖,boost的一些组件不会被编译:

1
2
sudo apt-get update
sudo apt-get install build-essential g++ python-dev autotools-dev libicu-dev libbz2-dev

解压:

1
sudo tar -xvzf boost_1_79_0.tar.gz

执行b2安装程序编译和安装,因为要创建文件夹,需要sudo权限:

1
2
3
4
sudo ./bootstrap.sh --with-libraries=all --with-toolset=gcc
# ./bootstrap.sh
sudo ./b2
sudo ./b2 install

如果是Windows环境,无论使用msvc还是gcc(mingw),只需要运行bootstrap.bat,然后执行b2.exe toolset=gcc stage或者b2.exe toolset=msvc stage即可,下载目录即是头文件目录,stage/lib即是库目录;

另一种不推荐的方法是从源码而不是压缩包,下载源码还需要检查子模块仓库,否则得到的boost也是不完整的:

1
2
3
git submodule
git submodule init
git submodule update

当出现版本错误,可以通过以下方式来删除现有的库:

1
2
3
4
5
sudo ./b2 install   #如果仍保留了编译文件
sudo rm -rf /usr/local/include/boost # 删除头文件
sudo rm -rf /usr/local/lib/libboost* # 删除库文件
sudo rm -rf /usr/local/lib/cmake/Boost* # 删除可能存在的 cmake 配置文件
sudo rm -rf /usr/local/lib/pkgconfig/boost* # 删除可能存在的 pkgconfig 文件

ZeroMQ安装

ZeroMQ是一个网络通讯框架,可能存在一些项目中的子模块,采用软件源或者deb方法安装可能导致下载不全,这里选择从源码编译安装:

克隆仓库地址:

1
git clone https://github.com/zeromq/libzmq.git

然后两个选择,使用自动脚本安装:

1
2
./autogen.sh
./configure && make check

这个不是必须的,或者使用cmake安装,根据https://github.com/zeromq/libzmq/blob/master/INSTALL:

对于windows,需要-G选项:

1
2
cmake -G "NMake Makefiles" -D WITH_PERF_TOOL=OFF -D ZMQ_BUILD_TESTS=OFF
-D ENABLE_CPACK=OFF -D CMAKE_BUILD_TYPE=Release

对于linux,无需-G指定编译器,使用:

1
cmake -D WITH_PERF_TOOL=OFF -D ZMQ_BUILD_TESTS=OFF -D ENABLE_CPACK=OFF -D CMAKE_BUILD_TYPE=Release
然后安装:
1
sudo make install

cppzmq安装

克隆:

1
git clone https://gitcode.com/gh_mirrors/cp/cppzmq.git

cppzmq不是一个安装库,如果是普通使用,只需要包含头文件即可,将hpp复制到ZeroMQ中:

1
2
cd cppzmq-master
sudo cp ./zmq.hpp /usr/local/include

但如果cmake需要使用(find_package),那就需要使用cmake安装到头文件搜索路径:

1
2
3
mkdir build
cmake .. -DCPPZMQ_BUILD_TESTS=OFF #禁用测试用例
sudo make install

Q&A

cppzmq执行sudo make install时出现:

1
2
3
4
5
6
7
/home/user/Desktop/cppzmq-master/tests/buffer.cpp:1:10: fatal error: catch2/catch_all.hpp: 没有那个文件或目录
1 | #include <catch2/catch_all.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [tests/CMakeFiles/unit_tests.dir/build.make:76:tests/CMakeFiles/unit_tests.dir/buffer.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:126:tests/CMakeFiles/unit_tests.dir/all] 错误 2
make: *** [Makefile:146:all] 错误 2
这属于测试用例错误,禁用测试用例,使用命令:cmake .. -DCPPZMQ_BUILD_TESTS=OFF