如何在Xcode 5中使用编辑方案将参数传递给main.cpp



我有一个简单的代码为例:

#include <iostream>
int main(int argc, const char * argv[]){
    int a, b, c;
    std::cin >> a >> b >> c ;
    std::cout << a << " "<< b << " " << c;
}

我想传递此代码,该参数" 1 2 3"在名为file.txt的文本文件中,位于同一文件中。

在产品>编辑方案中,我选择"运行参数侧栏"选项,然后选择"参数"选项卡。在"启动启动的论点"下,我输入&lt;file.txt选择确定并运行我的程序。该程序构建并运行,但不会在file.txt中传递" 1 2 3"参数。我还有其他一些设置吗?我把文件放在错误的文件夹中吗?真的很想做这项工作,以便我可以在大量数据集上测试代码,这些数据会烦人。

如果我cout&lt;&lt;argv [1]我得到"&lt;"如果我不引用。如果我引用了参数,我会得到"&lt; text.txt。"

不幸的是,Xcode并不像您所要求的那样直接支持命令行文件重定向。该参数用于在main中设置argv向量。当您在命令行上运行程序时,Shell(通常是/bin/bash)解释并设置重定向,并且不会将这些位传递给程序作为参数。Xcode不使用Shell启动您的程序,也不会设置重定向。

您可以通过Xcode获得的最接近,而无需更改源代码,需要两个步骤:

  1. 在您计划的运行设置中,在"信息"选项卡中,将可执行文件设置为/bin/sh。您需要从弹出菜单中选择"其他…"才能获取打开的对话框,然后键入/bin/sh。在打开对话框中键入/时,您将获得一个弹出文本框。

  2. 在"参数"选项卡中,添加此参数:

    -c "$TARGET_BUILD_DIR/$EXECUTABLE_PATH < /path/to/text.txt"
    

    /path/to/text.txt替换为输入文件的路径。

这将运行一个外壳,并要求外壳使用输入重定向运行您的程序,您会发现Xcode忽略了您的断点,因此很难调试您的程序。

最新更新