У меня есть очень простой проект 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;
}
И эта структура каталогов:
Я могу скомпилировать его, если использую «Командную строку разработчика».
[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]
...
Невозможно определить номер версии из: ->
NAR пытается сделать системный вызов link.exe
и / или cl.exe
(если я правильно помню) с флагом как /version
, чтобы он мог определить версию MSVS, чтобы он мог правильно передавать аргументы для этой версии. Это необходимо, потому что разные версии MSVS не имеют обратной совместимости, когда дело доходит до синтаксиса командной строки.
Однако, если рассматриваемый исполняемый файл не найден, команда ничего не выводит на стандартный вывод (опять же, IIRC), создавая пустую строку для вывода версии, которую невозможно проанализировать.
Конечно, было бы неплохо улучшить это сообщение об ошибке, чтобы быть более понятным. А пока можно попробовать запустить с mvn -X
вызвать режим отладки, который будет излучать много больше выходных данных от Maven, включая еще больше от NAR.
В любом случае, суть проблемы заключается в том, что среда CLI CLion (т. Е. Для каких переменных задано значение) должна отличаться от среды CLI вашей командной строки разработчика. Вы можете попробовать использовать set
чтобы перечислить переменные в каждой, а затем сравнить результаты.
Чтобы это исправить, вам, вероятно, потребуется: A) настроить что-либо в вашей среде CLion; или B) рассказать плагину NAR о CLion и / или вашей конфигурации MSVS, исправив его.
Если вы идете по маршруту (B), не стесняйтесь представить PR! И так или иначе, добавив что-то о CLion к NAR вики было бы замечательно.
Похоже, что кому-то не нравится редактирование, которое я вставил в ответ @ctrueden https://stackoverflow.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.