向项目添加命令行参数

时间:2015-05-07 14:48:01

标签: cmake

我的问题有点类似于SO但不一样。

我创建了一个HelloWorld程序,其中包含以下内容:

add_executable( HelloWorld ${SRC} )

当我生成项目文件时(例如Visual Studio .sln文件或XCode .xcodeproj文件)。我想点击运行按钮并在执行程序时将一些命令行参数传递给HelloWorld,如下所示:

./HelloWorld --gtest_filter=Test_Cases1*

另请参阅此SO,了解如何在Visual Studio中完成此操作。

是否可以在CMakeList文件中执行此操作?如果没有,为什么?

5 个答案:

答案 0 :(得分:6)

为什么这么复杂? VS和CMake如here中所述,即开即用。 在VS中打开CMakeLists.txt文件,然后打开“调试和启动设置”(例如,通过“ CMake”菜单或通过右键单击“解决方案资源管理器”。):

enter image description here

将程序参数添加到弹出的文件“ launch.vs.json”中的“ args”。

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "tests\\hellotest",
      "name": "tests\\hellotest with args",
      "args": ["argument after argument"]
    }
  ]
}

答案 1 :(得分:5)

CMake没有内置支持。原因是Visual Studio Project属性的Debugging选项卡中的设置不存储在项目文件(.vc[x]proj)中,而是存储在特定于用户和计算机的.user文件中,CMake不生成这些。

你可以在CMake中自己编写代码(我在工作中为我们的框架做了这些代码)。该文件只是XML,因此您可以根据需要预先填充它。它的结构很容易理解。例如,正在调试的程序的命令行参数存储在CommandArguments XML元素(嵌套在<DebugSettings>)内的<Configurations><Configuration>属性中。

答案 2 :(得分:5)

CMake 3.13.0看起来add support的形式为以下目标属性:

  • VS_DEBUGGER_COMMAND_ARGUMENTS-为Visual Studio C ++目标设置本地调试器命令行参数。
  • VS_DEBUGGER_ENVIRONMENT-为Visual Studio C ++目标设置本地调试器环境。

它扩展了这些命令的使用范围,这些命令自CMake 3.12起可用:

  • VS_DEBUGGER_COMMAND-为Visual Studio C ++目标设置本地调试器命令。
  • VS_DEBUGGER_WORKING_DIRECTORY-为Visual Studio C ++目标设置本地调试器工作目录。

答案 3 :(得分:0)

如果您想在Visual Studio 2017中将String[] stringArray = {"a","b","c"}; StringUtils.join(stringArray, ","); 作为参数添加到调试版本项目中:

project.vcxproj.user.in

E:\dev\IfcPL\examples\Trassierung.ifc

的CMakeLists.txt

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LocalDebuggerCommandArguments>E:\dev\IfcPL\examples\Trassierung.ifc</LocalDebuggerCommandArguments>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>

答案 4 :(得分:-2)

不是CMake技巧。您可以这样做为调试版本设置默认args

int main(int argc,char* argv[])
{   const char* command = argv[1];
    if(argc < 2)
    {             
#ifdef _DEBUG
        command="hello";
#else
        Usage();
        return 1;
#endif
    }

[ process command arg... ]