使用 Visual C++ 编译器 (msvc) 从 CLion 终端构建 C/C++ Maven NAR 项目:无法推断版本号
Building C/C++ Maven NAR project from CLion terminal using Visual C++ compiler (msvc): Cannot deduce version number
我有一个非常简单的 C++ 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;
}
而这个目录结构:
我用"Developer Command Prompt"就可以编译了。
[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]
...
Cannot deduce version number from: ->
NAR 尝试使用 /version
之类的标志对 link.exe
and/or cl.exe
进行系统调用(如果我没记错的话),以便它可以确定MSVS 的版本,以便它可以以正确的方式为该版本传递参数。这是必要的,因为不同版本的 MSVS 在命令行语法方面不向后兼容。
但是,如果未找到有问题的可执行文件,则该命令不会在标准输出(同样是 IIRC)上输出任何内容,从而为版本输出生成一个空字符串,无法解析。
如果能改进此错误消息使其更加清晰,那就太好了。同时,您可以尝试 运行 mvn -X
调用调试模式,这将从 Maven 发出 lot 更多输出,包括更多来自 NAR 的输出。
无论如何,问题的症结在于 CLion CLI 环境(即:哪些变量设置为什么)必须与开发人员命令提示符的 CLI 环境不同。您可以尝试使用 set
列出每个变量,然后比较输出。
要解决此问题,您可能需要:A) 在您的 CLion 环境中进行一些调整;或 B) 向 NAR 插件传授有关 CLion 的知识 and/or 通过修补您的 MSVS 配置。
如果你走(B)的路线,欢迎提交PR!无论哪种方式,将有关 CLion 的内容添加到 NAR wiki 都会很棒。
好像有人不喜欢我在@ctrueden 回答 https://whosebug.com/review/suggested-edits/10770206 中所做的编辑,所以我会 post 在这里回答。首先,我建议阅读@ctrueden 的回答。这是他回答的延续。
对于 (A)(在您的 CLion 环境中进行调整),您需要转到设置面板和 select 工具 > 终端,现在您必须配置 shell 路径如下(这适用于 Visual Studio 2012):
cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat"
我正在使用 Visual Studio 2012,我从 开发人员命令提示符 的属性中获得了它。我假设这个相同的步骤可以用于 Visual Studio.
的其他版本
我有一个非常简单的 C++ 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;
}
而这个目录结构:
我用"Developer Command Prompt"就可以编译了。
[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]
...
Cannot deduce version number from: ->
NAR 尝试使用 /version
之类的标志对 link.exe
and/or cl.exe
进行系统调用(如果我没记错的话),以便它可以确定MSVS 的版本,以便它可以以正确的方式为该版本传递参数。这是必要的,因为不同版本的 MSVS 在命令行语法方面不向后兼容。
但是,如果未找到有问题的可执行文件,则该命令不会在标准输出(同样是 IIRC)上输出任何内容,从而为版本输出生成一个空字符串,无法解析。
如果能改进此错误消息使其更加清晰,那就太好了。同时,您可以尝试 运行 mvn -X
调用调试模式,这将从 Maven 发出 lot 更多输出,包括更多来自 NAR 的输出。
无论如何,问题的症结在于 CLion CLI 环境(即:哪些变量设置为什么)必须与开发人员命令提示符的 CLI 环境不同。您可以尝试使用 set
列出每个变量,然后比较输出。
要解决此问题,您可能需要:A) 在您的 CLion 环境中进行一些调整;或 B) 向 NAR 插件传授有关 CLion 的知识 and/or 通过修补您的 MSVS 配置。
如果你走(B)的路线,欢迎提交PR!无论哪种方式,将有关 CLion 的内容添加到 NAR wiki 都会很棒。
好像有人不喜欢我在@ctrueden 回答 https://whosebug.com/review/suggested-edits/10770206 中所做的编辑,所以我会 post 在这里回答。首先,我建议阅读@ctrueden 的回答。这是他回答的延续。
对于 (A)(在您的 CLion 环境中进行调整),您需要转到设置面板和 select 工具 > 终端,现在您必须配置 shell 路径如下(这适用于 Visual Studio 2012):
cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat"
我正在使用 Visual Studio 2012,我从 开发人员命令提示符 的属性中获得了它。我假设这个相同的步骤可以用于 Visual Studio.
的其他版本