2015-10-14 213 views
1

我想在32位和64位窗口上构建一个需要GDI +的程序。 我使用的CMake 3.3.2的Windows 10的64位时,Visual Studio 2015年 作为最小的情况下,我有这样的CMakeLists.txt:CMake在64位平台上查找32位GDI +

cmake_minimum_required(VERSION 3.3) 
find_library(GDIP gdiplus) 

我在构建子目录运行此作为

cmake .. 

cmake -A x64 .. 

如果我比较CMakeCache.txt两种运行我看到它肯定回升32位或64位的选项(如CMAKE_LINKER),但它已经找到了32位gdiplus.lib在这两种情况下

//Path to a library. 
GDIP:FILEPATH=C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x86/gdiplus.lib 

应该找到64位版本C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64/gdiplus.lib代替。

有没有办法解决这个问题?

+0

可能,路过'-DCMAKE_LIBRARY_ARCHITECTURE = 64 'cmake应该可以工作,现在不能检查, – Tsyvarev

+0

@Tsyvarev没有任何效果,对不起,你知道是否可以打印'find_library'将检查的路径列表吗? –

+0

描述了'find_library'的完整搜索算法在[文档](https://cmake.org/cmake/help/v3.3/command/find_library.html)。现在我明白了为什么我用'CMAKE_LIBRARY_ARCHITECTURE'变量的方式不适合你:它只适用于'** lib **//'案件。您可以尝试传递'-DCMAKE_LIBRARY_PATH = C:/ Program Files(x86)/ Windows Kits/8.1/Lib/winv6.3/um/x86'。作为最后的手段,您可以手动将GPID变量设置为所需的库。 – Tsyvarev

回答

1

我在CMake邮件列表上询问。我要感谢谢尔盖Nikulov他的回答: http://public.kitware.com/pipermail/cmake/2015-October/061806.html

一个想法,我是如何创建的解决方法它ODBC的lib: 删除find_library(GDIPLUS_LIBRARY NAMES libgdiplus gdiplus)set(GDIPLUS_LIBRARY gdiplus) 或其他适当的名称。 Visual Studio将取决于目标的x86或x86_64捡起它从正确的道路。”

我不认为这是理想的,但它的工作。感谢谢尔盖。