cmake 向项目添加命令行参数

cnwbcb6i  于 2023-08-05  发布在  其他
关注(0)|答案(6)|浏览(247)

我的问题有点像这个SO,但不一样。
我用下面的代码创建了一个HelloWorld程序:

add_executable( HelloWorld ${SRC} )

字符串
当我生成一个项目文件(例如VisualStudio.sln文件,或XCode.xcodeproj文件)时。我想点击run按钮,并在HelloWorld执行程序时向它传递一些命令行参数,如下所示:

./HelloWorld --gtest_filter=Test_Cases1*


请参阅SO,了解如何在Visual Studio中完成此操作。
是否可以在CMakeList文件中执行此操作?如果不是,原因何在?

xlpyo6sf

xlpyo6sf1#

为什么这么复杂?VS和CMake支持这种开箱即用的功能,如这里所述。在VS中打开CMakeLists.txt文件,并打开“调试和启动设置”(例如通过“CMake”菜单或通过在“Solution Explorer”中右击。例如:


的数据
将程序参数添加到弹出的“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"]
    }
  ]
}

字符串

piok6c0g

piok6c0g2#

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++目标设置本地调试器工作目录。
sq1bmfud

sq1bmfud3#

这个答案是在CMake 3.13发布之前写的,所以现在已经过时了。还有一个answer showing solution with CMake 3.13+
CMake 3.12及以下版本对此没有内置支持。原因是Visual Studio项目属性的Debugging选项卡中的设置不存储在项目文件(.vc[x]proj)中,而是存储在特定于用户和计算机的.user文件中,并且CMake不会生成这些设置。
你可以自己在CMake中编写代码(我在工作中为我们的框架做了这件事)。该文件只是XML,因此您可以根据需要预先填充它。它的结构很容易理解。例如,正在调试的程序的命令行参数存储在<DebugSettings> XML元素(嵌套在<Configurations><Configuration>中)内的CommandArguments属性中。

vjrehmav

vjrehmav4#

如果您希望将E:\dev\IfcPL\examples\Trassierung.ifc作为参数添加到Visual Studio 2017中的调试构建项目:

  • project.vcxproj.user.in *:
<?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>

字符串

  • CMakeLists.txt*:
add_executable(HelloWorld main.cpp) 
configure_file(project.vcxproj.user.in ${CMAKE_BINARY_DIR}/HelloWorld.vcxproj.user)

ubbxdtey

ubbxdtey5#

Visual Studio 2022的解决方案是单击Debug菜单栏项,然后选择Debug and Launch Settings for <Project Name>


的数据
在下面打开的launch.vs.json中,您可以在底部添加参数:



现在,当您使用该概要文件开始调试时,您需要的命令行参数将被传递:


bn31dyow

bn31dyow6#

不是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... ]

字符串

相关问题