强制 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:是不是可以仅从静态库而不是源代码构建可执行文件?
如何强制 Maven 使用我的本地存储库而不是去远程存储库检索工件?