【发布时间】:2020-04-09 19:05:30
【问题描述】:
我正在学习如何使用 CMake,
我正在将一个工作项目从 Visual Studio 转换为 Cmake,并使用 NMake 进行构建。当前项目为 x64 和 x86 构建。我的操作系统是 windows 10
我目前的 CMakeLists.txt 很简单:
cmake_minimum_required(VERSION 3.13.0)
project(example CXX)
ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)
set(CMAKE_CXX_FLAGS -G"NMake Makefiles")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(SimManager
Source/main.cpp
)
set_target_properties (${PROJECT_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED TRUE
CXX_EXTENSIONS FALSE
)
我用来构建的命令是:
cmake -G"NMake Makefiles ..
nmake
我得到的错误是
fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86'
我了解 NMake 选择使用哪个编译器(x86 或 x64)的方式是打开相应的控制台终端。我正在为 VS 2017 使用 Select x64 Native Tools 命令提示符
被执行的链接器的命令行是:
command "C:\PROGRA~2\MIB055~1\2019\ENTERP~1\VC\Tools\MSVC\1425~1.286\bin\Hostx86\x86\link.exe /nologo @CMakeFiles\example.dir\objects1.rsp /out:SimManager.exe /implib:SimManager.lib /pdb:E:\Projects\example\Debug\example.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\example.dir/intermediate.manifest CMakeFiles\example.dir/manifest.res" failed (exit code 1112) with the following output: fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86'
我可以看到它设置了 /machine:X86。我没有在 CMakeLists.txt 中设置它。如何让它使用 64 位链接器?
我尝试在 cmake 调用中添加建议的参数,但没有任何影响
cmake -G"NMake Makefiles" --build build64 --config Release -host_arch=amd64 -arch=amd64 ..
也尝试添加到 CMakeLists,同样的错误仍然存在
set(CMAKE_SYSTEM_PROCESSOR AMD64)
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "-m64" LINK_FLAGS "-m64")
set(ARCH amd64)
如果可能的话,我希望在 CMakeLists.txt 中进行更改,这样我就可以尽可能地显示命令行调用。此项目不适用于 32 位。
谢谢
【问题讨论】:
-
见 CMAKE_SYSTEM_PROCESSOR 和 CMAKE_SYSTEM_NAME
-
设置(CMAKE_SYSTEM_PROCESSOR AMD64)?
-
试过了,还是一样的错误
-
显示所有cmake并制作日志+显示cmakecash
-
CMakeCache 在这里:pastebin.com/YXG6SfKu CMakeLists.txt 在上面的问题中,我不得不省略一些行
标签: c++ windows makefile cmake nmake