更改默认 CMake 版本,Ubuntu 14.04
Change default CMake version, Ubuntu 14.04
据我所知,我至少需要使用 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 remove 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 版本?
这里发生了两件事:
- 根据 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")
据我所知,我至少需要使用 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 remove 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 版本?
这里发生了两件事:
- 根据 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")