0

我有一个非常简单的 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;
}

而这个目录结构:

目录结构 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]
...
4

2 回答 2

1

无法从以下位置推断版本号:->

NAR 尝试使用类似 的标志对link.exe和/或cl.exe(如果我没记错的话)进行系统调用/version,以便它可以确定 MSVS 的版本,以便它可以以正确的方式为该版本传递参数。这是必要的,因为不同版本的 MSVS 在命令行语法方面不向后兼容。

但是,如果找不到相关的可执行文件,则该命令不会在 stdout 上输出任何内容(同样是 IIRC),从而为版本输出生成一个空字符串,该字符串无法解析。

改进此错误消息以使其更清晰肯定会很好。同时,您可以尝试运行 withmvn -X以调用调试模式,这将从 Maven 发出更多输出,包括来自 NAR 的更多输出。

无论如何,问题的症结在于 CLion CLI 环境(即:哪些变量设置为什么)必须与开发人员命令提示符的 CLI 环境不同。您可以尝试使用set列出每个变量,然后区分输出。

要解决此问题,您可能需要: A) 在您的 CLion 环境中调整某些内容;或 B) 通过修补 NAR 插件来教授有关 CLion 和/或您的 MSVS 配置的信息。

如果你走 (B) 的路线,请随时提交 PR!无论哪种方式,将有关 CLion 的内容添加到NAR wiki都会很棒。

于 2016-01-03T15:32:17.800 回答
1

看起来有人不喜欢我在@ctrueden answer https://stackoverflow.com/review/suggested-edits/10770206中输入的编辑,所以我将在此处发布答案。首先,我建议阅读@ctrueden 答案。这是他回答的延续。

对于 (A)(在您的 CLion 环境中进行一些调整),您需要转到设置面板并选择工具 > 终端,现在您必须按如下方式配置 shell 路径(这适用于 Visual Studio 2012):

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

我正在使用 Visual Studio 2012,我从Developer Command Prompt的属性中获得了这个。我假设这个相同的步骤可以用于其他版本的 Visual Studio。

vs2012 开发者命令提示符的属性

于 2016-01-07T14:50:57.673 回答