如何在 Qt 中使用 GeographicLib

Posted

技术标签:

【中文标题】如何在 Qt 中使用 GeographicLib【英文标题】:How to use GeographicLib in Qt 【发布时间】:2019-12-11 16:28:50 【问题描述】:

您好,我是 qt 和 CMake 的新手,这可能是一个简单的解决方法,但我一整天都在苦苦挣扎。

我正在尝试在 Qt 项目中使用 GeographicLib。我安装了 CMake 并从 https://geographiclib.sourceforge.io/html/intro.html 下载了文件。在 Geographiclib 网站上有Building the library for use with Qt 的指南。您必须运行几个命令:

 export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
 mkdir BUILD
 cd BUILD
 cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib" ..
 mingw32-make
 mingw32-make install

运行上述内容后,我得到以下信息:

C:\Users\koos>  export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
'export' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\koos>  mkdir BUILD
A subdirectory or file BUILD already exists.

C:\Users\koos>  cd BUILD

C:\Users\koos\BUILD>  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program 
Files/GeographicLib" ..
CMake Error: The source directory "C:/Users/koos" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

the website 说如果 cmake 抱怨你必须运行以下命令:

env PATH="$( echo $PATH | tr : '\n' |
while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
sed 's/:$//' )" \
cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib" ..

然后我得到:

C:\Users\koos\BUILD>  env PATH="$( echo $PATH | tr : '\n' |
'env' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\koos\BUILD>  while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
The syntax of the command is incorrect.

C:\Users\koos\BUILD>  sed 's/:$//' )" \
'sed' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\koos\BUILD>  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program 
Files/GeographicLib" ..

我正在使用 Desktop Qt 13.0 MinGw 64 位。我认为以下有问题:“”mingw32-make“” (是 32 而不是 64,但我尝试更改它但没有得到任何地方)。有人可以向我解释一下我应该如何在 Qt 中安装 Geographic lib 库(也许如何使用 cmake qui 来完成任务,因为我对 cmake 不太了解)

编辑:

所以我安装了 cygwin,现在它给了我以下信息:

koos@computer ~
$   mkdir BUILD
export PATH="`cygpath -m C:\Qt\Tools\mingw730_64\bin`:$PATH"
  cd BUILD
  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program 
Files/GeographicLib" ..
 mingw32-make
mingw32-make install
koos@computer ~
$   mkdir BUILD

koos@computer ~
$   cd BUILD

koos@computer ~/BUILD
$   cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program 
Files/GeographicLib" ..
CMake Error: The source directory "C:/cygwin64/home/koos" does not appear 
to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

koos@computer ~/BUILD
$   mingw32-make
-bash: mingw32-make: command not found

koos@computer ~/BUILD
$   mingw32-make install
-bash: mingw32-make: command not found

从 GeographicLib 的***目录运行后,出现以下错误:

CMake Error: CMake was unable to find a build program corresponding to 
"MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to 
select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to 
"MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to 
select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

C:\Qt\Tools\mingw730_64\bin 路径确实包含 mingw32-make。

感谢您的耐心等待!

问候 库斯

【问题讨论】:

【参考方案1】:

来自 GeographicLib 站点的 instructions 说要使用 Cygwin 运行命令:

如果您在 Windows 上为 Qt 使用 mingw 编译器,那么您需要使用 mingw 构建 GeographicLib。 您可以在 cygwin 下使用 cmake 完成此操作,例如, ...

exportenvsed 等命令并非 Windows 原生命令,而是 Linux 命令。这些必须在 Cygwin 命令提示符下运行。你的问题没有在你的设置中提到 Cygwin,所以我猜你要么没有安装它,要么没有使用它。尝试为您的机器安装 Cygwin 并从 Cygwin 命令提示符中运行列出的命令。

这些说明假设您从 GeographicLib 包的 *** 目录运行命令,因此您必须先导航到该目录。更新后的命令如下所示:

 cd C:/path/to/your/GeographicLib
 export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
 mkdir BUILD
 cd BUILD
 cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib" ..
 mingw32-make
 mingw32-make install

【讨论】:

感谢我安装了 cygwin 并在 cygwin 终端中运行了命令,但仍然出现错误。我用错误更新了我的问题 @Koos 假设您从您安装的 GeographicLib 包的 ***目录 运行这些命令。看来您只是从主目录运行它们。 您必须将您的 工作目录 更改为包的***目录(无论您下载它并将其放在计算机上的哪个位置)。将cd 命令与cd C:/path/to/your/GeographicLib 类似。只有这样,您才能运行说明中的​​命令。我将更新答案以显示这一点。 Cygwin 不知道如何找到您的 MinGW 可执行文件(特别是 mingw32-make)。 export 命令应该设置这个,那么路径 c:/QtSDK/mingw/bin 是否存在于您的机器上,并且包含 mingw32-make 可执行文件? 路径 C:\Qt\Tools\mingw730_64\bin 包含 mingw32-make.exe 但更改路径后出现此错误:CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles"【参考方案2】:

在 Cygwin 中键入以下命令对我有用:

 set CC=C:/Qt/Tools/mingw730_64/bin/x86_64-w64-mingw32-gcc
 set CXX=C:/Qt/Tools/mingw730_64/bin/x86_64-w64-mingw32-g++

 cd C:/path/to/my/GeographicLib
 rm -rf BUILD; mkdir BUILD; cd BUILD
 export PATH="`cygpath C:/Qt/Tools/mingw730_64/bin`:$PATH"
 cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib" ..
 mingw32-make
 mingw32-make install

 env PATH="$( echo $PATH | tr : '\n' |
 while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
 sed 's/:$//' )" \
 cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX="C:/Program Files/GeographicLib" ..
 mingw32-make
 cygstart --action=runas mingw32-make install

注意:请确保您已安装 Cmake,您可以下载适用于 windows here 的安装程序。不要安装 cygwin 版本的 cmake,因为它没有 MinGW Makefiles 生成器,并确保选中 cmake 安装程序中的“添加到系统路径”复选框。安装 cygwin 时,请确保选择“make”(make 实用程序的 gnu 版本)包。

【讨论】:

以上是关于如何在 Qt 中使用 GeographicLib的主要内容,如果未能解决你的问题,请参考以下文章

GeographicLib 的VS2013项目生成以及Geoid Height 提取

GeographicLib 的VS2013项目生成以及Geoid Height 提取

如何在 Qt Creator 中使用 MinGW-64

如何让 Qt 异步运行以进行交互使用,如 Matplotlib 离子模式?

在qt中如何用SQLite向表中插入日期型变量?

Qt中容器类应该如何存储对象