【问题标题】:How to change build machine type with CMake如何使用 CMake 更改构建机器类型
【发布时间】: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


【解决方案1】:

尝试在CMakeLists.txt 中添加以下内容:

target_link_options(target PRIVATE /machine:x64)

见documentation。

或者您可以编辑CMakeCache.txt 并更改以下变量:

CMAKE_MODULE_LINKER_FLAGS:STRING=/machine:x64

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2017-01-01
    相关资源
    最近更新 更多