Ошибка компиляции «No Target Architecture» в Visual Studio с использованием CMake - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь скомпилировать мой C++ CMake проект в Visual Studio.Однако я получаю следующее сообщение об ошибке:

#error:  "No Target Architecture"   C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt   C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um\winnt.h  154

Я проверил свой код и никогда не включаю winnt.h, но я включаю windows.h , так что это исключает решениеникогда не включать winnt.h.

Это фрагмент кода winnt.h, в котором выдается ошибка:

//
// TODO: WOWXX - Unblock ARM. Make all alignment checks DWORD for now.
//

#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED)
#error "No Target Architecture"
#endif

Ранее я успешно компилировал этот проект с использованием MinGW и WSL (Windows Subsystem for Linux) за пределами Visual Studio.Как мне сказать Visual Studio, что моя архитектура 64-bit и amd64 (?).Что нужно для компиляции?Конфигурация запуска установлена ​​на x64-Debug.Включение stdafx.h невозможно, поскольку заголовочный файл не найден.Я также использую Boost, но это решается правильно, добавив следующую строку в мой CMakeLists.txt:

set(BOOST_ROOT "C:/local/boost_1_69_0_b1_rc3")

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Я думаю, это должно быть исправлено -DCMAKE_GENERATOR_PLATFORM=x64

0 голосов
/ 01 декабря 2018

Не указывается, если ошибка возникает при настройке проекта или когда проект был настроен, и вы пытаетесь построить.

Это может быть проблема с вашей установкой Visual Studio, как кажетсякак будто вы не используете cmake в командной строке, а используете cmake, встроенный в Visual Studio.

В обоих случаях cmake запустится, чтобы убедиться, что допустимая программа может быть собрана.

В Visual Studioсоздайте новый проект CMake, и он создаст общий проект c ++ с файлом CMakeLists.txt.При создании этого проекта он будет проходить через этап обнаружения компилятора, настройки проекта и сборки.В моей системе это значение по умолчанию для x86-Debug, переключите его на x64-Debug, и он снова будет проходить процесс для архитектуры x64.

Лично я считаю, что связанный интерфейс CMake очень запутанный, и я не используюЭто.Он также использует более старые инструменты CMake и Ninja.

Если все это работает, значит что-то не так, и вам нужно включить полное сообщение об ошибке.Полное сообщение об ошибке покажет цепочку включаемых файлов и может точно определить, если вы используете неправильный заголовочный файл Windows.

0 голосов
/ 30 ноября 2018

Поскольку в сообщении об ошибке упоминается мой файл (например, file_operations.h) , я решил определить архитектуру внутри него, используя следующий макрос :

#define _AMD64_ 1

Это устранило проблемуно я считаю, что существует «лучшее» решение путем настройки CMakeLists.txt или Visual Studio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...