ubuntu - 更改默认 CMake 版本,Ubuntu 14.04

标签 ubuntu cmake catkin

据我所知,我至少需要使用 CMake 3.1 才能使用 C++11。 Ubuntu 14.04 附带 2.8.x。

我按照指南建议应将 CMake 安装到 /opt,因此我将 CMake 安装到 /opt/cmake-3.2.1-Linux-x86_64 并将 /opt/cmake-3.2.1-Linux-x86_64/bin 添加到 .bashrc 中的路径(作为第一个元素)。

如果我尝试apt-get删除cmake,该进程不仅要删除CMake,还要删除ROS(所以是的,我已经停在 ubuntu: upgrading software (cmake) - version disambiguation (local compile) ,只是得出结论,我不能'不要使用答案)

cmake --version 的结果:

cmake version 3.2.1

将所需的最低版本设置为 3.1 并在同一终端中运行 catkin_make 会产生:

CMake 3.1 or higher is required.  You are running version 2.8.12.2

如何让 catkin 使用新(/正确)版本的 CMake?

最佳答案

这里发生了两件事:

  1. 根据 catkin_make 文件,它不会将 shell 环境复制到 python 子进程“cmake”调用。

catkin_make:

...
if args.no_color:
    run_command(cmd, build_path)
else:
    run_command_colorized(cmd, build_path)

builder.py:

def run_command(cmd, cwd, quiet=False, colorize=False, add_env=None):
    ...
    env = None
    if add_env:
        env = copy.copy(os.environ)
        env.update(add_env)
    try:
        proc = subprocess.Popen(
            cmd, cwd=cwd, shell=False,
            stdout=stdout_pipe, stderr=stderr_pipe,
            env=env
        )

您可以修改 catkin_make 脚本中的相应行,以正确传递 add_env 的空字典,并且它应该尝试将环境复制到生成的子进程:

if args.no_color:
    run_command(cmd, build_path, add_env={})
else:
    run_command_colorized(cmd, build_path, add_env={})

这应该修改路径并让它找到合适的 cmake 版本,但我不确定这是否能单独解决您原来的问题,导致我们...

  • 如果您在构建catkin时只是尝试使用C++11,您也可以将-std=c++11编译器标志添加到CMAKE_CXX_FLAGS:
  • catkin_make --cmake-flags "-DCMAKE_CXX_FLAGS=\${CMAKE_CXX_FLAGS};-std=c++11"

    或修改CMakeLists.txt:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

    关于ubuntu - 更改默认 CMake 版本,Ubuntu 14.04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636728/

    相关文章:

    Python:访问存储在远程计算机上的文件

    用于 C 程序的 CMake 和 BLAS

    c++ - 在 CLion 中设置 ROS 包

    linux - 使用 "top"命令了解 Linux 中的 CPU 使用情况以了解 VLC 使用情况

    ubuntu - ssh 到 localhost 显示 "Connection closed by remote host"

    python - 从文件中获取文本时,不会对 ç 和 ã 等特殊字符进行解码

    libpng 的 CMake 编译选项

    c++ - CMake 中的绝对路径与相对路径

    ros - catkin_package 与 find_package

    ros - 可以在catkin工作区之外创建ROS节点吗?