Я учусь использовать 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, открывая соответствующий консольный терминал. Я использую командную строку Select x64 Native Tools для VS 2017
Командная строка для исполняемого компоновщика:
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 бит.
Спасибо