强制 CMake 寻找 x64 位库而不是 x32

Posted

技术标签:

【中文标题】强制 CMake 寻找 x64 位库而不是 x32【英文标题】:Force CMake to look for x64 bit libraries instead of x32 【发布时间】:2018-09-06 14:41:13 【问题描述】:

所以我一直在 *** 和其他一些论坛中寻找如何强制 CMake 寻找 x64 库而不是 x32,但并没有太大帮助。

当我这样做时:

find_package(Boost
    1.67.0
    COMPONENTS
        atomic
    REQUIRED
)

由于某种原因,CMake 会查找 x32 库而不是 x64 库,但无法找到它们。我通过在 cmake 命令中添加这个选项来知道这一点:

-DBoost_DEBUG=ON

这向我展示了这一点(它当然比我发布的内容更多,但我发布了重要的行):

_boost_LIBRARY_SEARCH_DIRS_RELEASE = C:/develop/libraries/boost/1.67.0/x64-vc141/Release/lib
Searching for ATOMIC_LIBRARY_RELEASE: boost_atomic-vc141-mt-x32-1_67;boost_atomic-vc141-mt;boost_atomic-vc140-mt-x32-1_67;boost_atomic-vc140-mt;boost_atomic-mt-x32-1_67;boost_atomic-mt;boost_atomic

但不是寻找这个:

boost_atomic-vc141-mt-x32-1_67

这很明显为什么找不到它。 我希望它寻找这个:

boost_atomic-vc141-mt-x64-1_67

我错过了什么?是否有一些额外的 CMake 配置我想添加以使 CMake 了解我正在为 x64 架构使用 boost?

我什至尝试通过调用手动方式以 x64 模式启动 Developer Command Prompt for VS 17

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64

提前感谢您的帮助!

【问题讨论】:

你在生成什么? Visual Studio 解决方案? 这是一个库项目,不尝试生成VS解决方案,只是制作文件,以便我可以在使用 cmake --build 命令后构建它。这是我的生成命令:cmake -DBoost_DEBUG=ON -DCMAKE_INSTALL_PREFIX=C:\tmpppp -DCMAKE_BUILD_TYPE=Release .. 【参考方案1】:

当您使用 CMake 生成任何内容时,您应该指定一个生成器,除非默认的生成器适合您的需要。看起来在您的情况下,默认值(无论它是什么)对您不起作用,因此您应该像这样提供它(对于 MSVS 2015):

cmake -G "Visual Studio 14 2015 Win64"

请注意生成器中的架构,这对搜索很重要。稍后您可以使用 CMake --build 构建它,但您仍然必须生成一些使用 x64 编译器的 make 文件。

【讨论】:

哦哇...奇怪的是它确实有效!我在想 CMake 应该有一些选择,明确定义架构类型,但我想一切都发生在幕后,这是解决方案的好工作!非常感谢您的帮助! @GiladReich,您可能不完全了解 CMake 是什么,什么不是。它是一个简单(好吧,不是那么简单)的生成器工具,其目标是拥有一些通用的 make 文件语言,允许从中生成其他 make 文件。例如,您编写一个 CMake 文件,然后从中生成 Visual Studio、XCode、Borland 等项目。 CMake --build 在 CMake 中是一个相对较新的东西,它只是使用一些外部工具来构建项目(在 MSVS 的情况下是 MSBuild)。它不知道如何构建它只是委托的任何东西。 感谢您的提醒!感谢。但我已经知道这些东西了。只是我正在从事的项目使用了 CMake 的一些高级功能,正如您所说的“没那么简单”,我正在慢慢了解。我知道 VS 解决方案生成器,直到现在我只使用 NMake JOM 生成器,但我从来不知道它有 Win64 选项,对于我正在从事的项目来说,这是一个新事物,以在 x64 中构建库,这就是为什么我没有忽略它。谢谢你,我知道了。 说到这个,您是否有任何想法是否可以使用 JOM 生成器做同样的事情(x64 架构)?因为使用 JOM,我可以指定要使用多少个内核来构建项目。 @GiladReich,从已建立 x64 环境的控制台运行 cmake 并选择正确的生成器“NMake Makefiles JOM”应该可以满足您的需要。刚刚打开 vanilla cmd,在那里运行 vcvars64.bat,然后运行 ​​cmake -G "NMake Makefiles",它选择了正确的 x64 编译器,足以检测到正确的 boost 版本。

以上是关于强制 CMake 寻找 x64 位库而不是 x32的主要内容,如果未能解决你的问题,请参考以下文章

CMake:是不是可以仅从静态库而不是源代码构建可执行文件?

当我链接动态库而不是静态库时,CMake 有效

如何强制 Maven 使用我的本地存储库而不是去远程存储库检索工件?

x86、x32 和 x64 架构之间的区别?

Radmin Server-3.5 完美绿色版(x32 x64通用)值得收藏

移植 - 共享内存 x32 和 x64 进程