在Ubuntu上编译MRPT教程 我在遵循Ubuntu中使用C++的MRPT库的教程,但我并没有得到太多的帮助。我成功地下载了Ubuntu二进制文件 现在,我在遵循教程中用这个例子从MP/P中编写第一个C++程序。

在Ubuntu上编译MRPT教程 我在遵循Ubuntu中使用C++的MRPT库的教程,但我并没有得到太多的帮助。我成功地下载了Ubuntu二进制文件 现在,我在遵循教程中用这个例子从MP/P中编写第一个C++程序。,c++,ubuntu,cmake,C++,Ubuntu,Cmake,我在一个目录中下载并解压了mrpt_example1.tar.gz,但当我使用命令运行时: ccmake . 没有生成代码的选项MRPT_DIR已设置为/usr/share/MRPT,即MRPTConfig.cmake的位置,因此似乎ccmake已找到该位置。我尝试设置其他选项,如CMAKE\u BUILD\u TYPE,可执行文件\u OUTPUT\u PATH或库\u OUTPUT\u PATH,但这没有帮助 如何告诉ccmake实际编译?您可以直接使用cmake而不是使用ccmake,

我在一个目录中下载并解压了mrpt_example1.tar.gz,但当我使用命令运行时:

 ccmake .
没有生成代码的选项
MRPT_DIR
已设置为
/usr/share/MRPT
,即
MRPTConfig.cmake
的位置,因此似乎
ccmake
已找到该位置。我尝试设置其他选项,如
CMAKE\u BUILD\u TYPE
可执行文件\u OUTPUT\u PATH
库\u OUTPUT\u PATH
,但这没有帮助


如何告诉
ccmake
实际编译?

您可以直接使用
cmake
而不是使用
ccmake
,如下所示:

cmake .
这将在当前目录中生成一个
Makefile

$ ls -1
CMakeCache.txt
CMakeFiles
cmake_install.cmake
CMakeLists.txt
Makefile
README.txt
test.cpp
然后可以运行
make
来编译示例程序:

$ make
Scanning dependencies of target mrpt_example1
[ 50%] Building CXX object CMakeFiles/mrpt_example1.dir/test.o
[100%] Linking CXX executable mrpt_example1
[100%] Built target mrpt_example1
$ ./mrpt_example1
L: (0,4,2)
R: (2.000,1.000,45.00deg)
C: (x,y,z,yaw,pitch,roll)=(0.5000,0.5000,1.5000,-90.00deg,0.00deg,-90.00deg)
R+C:(x,y,z,yaw,pitch,roll)=(2.0000,1.7071,1.5000,-45.00deg,-0.00deg,-90.00deg)
Computation in: 0.0857 us
L': (-3.03553,-0.5,0.207107)
R(+)C(+)L' = (-5.82867e-16,4,2)
Should be equal to L = (0,4,2)
|(R(+)C)-L|= 3.0834
|L-(R(+)C)|= 3.0834
然后运行示例程序:

$ make
Scanning dependencies of target mrpt_example1
[ 50%] Building CXX object CMakeFiles/mrpt_example1.dir/test.o
[100%] Linking CXX executable mrpt_example1
[100%] Built target mrpt_example1
$ ./mrpt_example1
L: (0,4,2)
R: (2.000,1.000,45.00deg)
C: (x,y,z,yaw,pitch,roll)=(0.5000,0.5000,1.5000,-90.00deg,0.00deg,-90.00deg)
R+C:(x,y,z,yaw,pitch,roll)=(2.0000,1.7071,1.5000,-45.00deg,-0.00deg,-90.00deg)
Computation in: 0.0857 us
L': (-3.03553,-0.5,0.207107)
R(+)C(+)L' = (-5.82867e-16,4,2)
Should be equal to L = (0,4,2)
|(R(+)C)-L|= 3.0834
|L-(R(+)C)|= 3.0834
请注意,您应该从提取
mrpt_example1.tar.gz
内容的干净副本开始,并在干净副本中执行这些步骤


或者,您可以使用示例项目的版本,该版本提供现成的
Makefile
,并且不需要CMake:

这将在以下教程中介绍:


否则,如果必须使用
ccmake

首先,提取
mrpt\u example1.tar.gz
内容的干净副本

输入提取的
mrpt\u示例1
目录并运行:

ccmake .
这将显示一个具有以下选项的交互式对话框:

Press [enter] to edit option
Press [c] to configure
Press [h] for help           Press [q] to quit without generating
Press [t] to toggle advanced mode (Currently Off)
c
进行配置。屏幕顶部现在将显示:

CMAKE_BACKWARDS_COMPATIBILITY   *2.4
CMAKE_BUILD_TYPE                *
CMAKE_INSTALL_PREFIX            */usr/local
EXECUTABLE_OUTPUT_PATH          *
LIBRARY_OUTPUT_PATH             *
MRPT_DIR                        */usr/share/mrpt
c
再次配置。现在将提供以下选项:

Press [enter] to edit option
Press [c] to configure       Press [g] to generate and exit
Press [h] for help           Press [q] to quit without generating
Press [t] to toggle advanced mode (Currently Off)
g
生成输出文件(包括
Makefile
)并退出

请注意,生成了一个
Makefile

$ ls -1
CMakeCache.txt
CMakeFiles
cmake_install.cmake
CMakeLists.txt
Makefile
README.txt
test.cpp

您可以运行
make
来编译示例程序,然后在编译后运行示例程序,如上所述。

我认为值得补充的是,从单独的生成目录运行
cmake
通常是一个好主意,以免生成文件污染源目录。当然,对于您不打算修改的软件包来说,这并不重要。一般来说,这一点是有效的,尽管在这种特殊情况下,示例项目明确建议使用命令
ccmake.
。答案与官方建议的偏差最小,以避免引入潜在的混淆原因。非常感谢您提供了这一非常有用的答案!我没有想到在使用
ccmake
时需要按
c
两次。通过
cmake.
了解备选路线也很棒。