使用 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.

的其他版本