【问题标题】:Command arguments in compiler configurations编译器配置中的命令参数
【发布时间】:2010-02-26 19:34:19
【问题描述】:

[edit] 我的意思是“编译器配置中的命令参数”。标题。

我正在尝试进入游戏模组。我正在尝试实现源 sdk。其中一个步骤是在我的编译器配置中进行调试并向命令参数添加一些数据

-dev -sw -game "C:\Program Files (x86)\Steam\steamapps\SourceMods\firstmod"

现在我知道命令参数是什么了。它们通过 WinMain 的参数传递,并根据编译器配置中的名称来判断。我认为这与它有关。或者可能不是。我只是不确定以上是否会被视为 1 个参数或多个参数。以及通过传递目录试图实现什么。他们的信息不太详细。

【问题讨论】:

  • 您是在问参数的作用或应该如何添加它们。

标签: c++ c visual-studio visual-studio-2008


【解决方案1】:

在普通(读取控制台)C/C++ 应用程序中,您将拥有具有以下声明的程序入口点:

int main( int argc, char* argv[] );

这里argc 是命令行“字符串”的数量,包括命令本身,而argv 是这些字符串的数组。所以在你的例子中它是argc of 5(添加程序名称),argv[0] 是程序的名称,argv[1]"-dev",等等。

现在在 Windows 下,GUI 应用程序有所不同 - 入口点声明为:

int WINAPI WinMain(      
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
);

所以lpCmdLine 指向整个命令行(这次不包括应用程序名称),所以它是一个字符串,就像您在上面所说的那样。不过,有一些辅助函数可以拆分该字符串。看看 MSDN 上的这两个条目:

【讨论】:

    【解决方案2】:

    您的示例有四个参数:

    1. -dev
    2. -sw
    3. -game
    4. C:\Program Files (x86)\Steam\steamapps\SourceMods\firstmod

    因为最后一个参数用引号括起来,Windows 命令行解析器会将其视为单个参数。

    至于它试图通过传递目录来实现什么,如果不看代码做什么就不可能确定。但一种猜测是构建将生成多个相互关联的文件,这些文件都应该存在于一个目录中。所以你指定目录,所有文件都将在那里创建。

    【讨论】:

    • 如果我记得很清楚,第一个参数是 Linux 上的二进制路径。这意味着 5 个参数而不是 4 个。
    • 您的意思是“引号”而不是“括号”吗?
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多