Сборка проекта NAR C/C++ Maven из терминала CLion с использованием компилятора Visual C++ (msvc): невозможно определить номер версии

У меня есть очень простой проект CAR Maven NAR, и я хочу скомпилировать его из терминала CLion. Это pom.xml моего проекта:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>me.app.sample</groupId>
    <artifactId>app-sample</artifactId>
    <version>1.0</version>
    <packaging>nar</packaging>

    <build>
        <defaultGoal>integration-test</defaultGoal>
        <plugins>
            <plugin>
                <groupId>com.github.maven-nar</groupId>
                <artifactId>nar-maven-plugin</artifactId>
                <version>3.0.0</version>
                <extensions>true</extensions>
                <configuration>
                    <libraries>
                        <library>
                            <type>executable</type>
                            <run>true</run>
                        </library>
                    </libraries>
                </configuration>
            </plugin>
        </plugins>
    </build>   
</project>

Простой main.cpp:

#include <iostream>
using namespace std;
int main() {
    cout << "Hello world" << endl;
    return 0;
}

И эта структура каталогов:

структура каталогов C / C++ Maven NAR проект

Я могу скомпилировать его, если использую "Командную строку разработчика".

[INFO] -----------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------

Проблема возникает при использовании терминала CLion (ALT+F12) для сборки проекта:

E:\...app-sample>mvn compile
...
[INFO] Using AOL: x86-Windows-msvc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
...
[ERROR] Failed to execute goal com.github.maven-nar:nar-maven-plugin:3.0.0:nar-validate (default-nar-validate) on project app-sample: Cannot deduce version number from: -> [Help 1]
...

2 ответа

Решение

Невозможно определить номер версии из: ->

NAR пытается сделать системный вызов link.exe и / или cl.exe (если я правильно помню) с флагом как /version, чтобы он мог определить версию MSVS, чтобы он мог правильно передавать аргументы для этой версии. Это необходимо, потому что разные версии MSVS не имеют обратной совместимости, когда дело доходит до синтаксиса командной строки.

Однако, если рассматриваемый исполняемый файл не найден, команда ничего не выводит на стандартный вывод (опять же, IIRC), создавая пустую строку для вывода версии, которая не может быть проанализирована.

Конечно, было бы неплохо улучшить это сообщение об ошибке, чтобы быть более понятным. А пока можно попробовать запустить с mvn -X вызвать режим отладки, который будет генерировать намного больше выходных данных из Maven, включая еще больше из NAR.

В любом случае, суть проблемы заключается в том, что среда CLion CLI (т. Е. Какие переменные установлены и какие) должны отличаться от среды CLI командной строки разработчика. Вы можете попробовать использовать set чтобы перечислить переменные в каждой, а затем сравнить результаты.

Чтобы это исправить, вам, вероятно, потребуется: A) настроить что-либо в вашей среде CLion; или B) рассказать плагину NAR о CLion и / или вашей конфигурации MSVS, исправив его.

Если вы идете по маршруту (B), не стесняйтесь представить PR! И так или иначе, было бы замечательно добавить что-нибудь о CLion в NAR wiki.

Похоже, кому-то не нравится редактирование, которое я вставил в ответ @ctrueden https://stackru.com/review/suggested-edits/10770206, поэтому я опубликую ответ здесь. Сначала я рекомендую прочитать ответ @ctrueden. Это продолжение его ответа.

Для (A) (настроить что-то в вашей среде CLion) вам нужно перейти на панель настроек и выбрать "Инструменты"> "Терминал", теперь вам нужно будет настроить путь оболочки следующим образом (это будет работать для Visual Studio 2012):

cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat"

Я использую Visual Studio 2012, и я получил это из свойств командной строки разработчика. Я предполагаю, что этот же шаг можно использовать с другими версиями Visual Studio.

свойства для командной строки разработчика для vs2012

Другие вопросы по тегам