我的问题有点类似于SO但不一样。
我创建了一个HelloWorld
程序,其中包含以下内容:
add_executable( HelloWorld ${SRC} )
当我生成项目文件时(例如Visual Studio .sln文件或XCode .xcodeproj文件)。我想点击运行按钮并在执行程序时将一些命令行参数传递给HelloWorld
,如下所示:
./HelloWorld --gtest_filter=Test_Cases1*
另请参阅此SO,了解如何在Visual Studio中完成此操作。
是否可以在CMakeList文件中执行此操作?如果没有,为什么?
答案 0 :(得分:6)
为什么这么复杂? VS和CMake如here中所述,即开即用。 在VS中打开CMakeLists.txt文件,然后打开“调试和启动设置”(例如,通过“ CMake”菜单或通过右键单击“解决方案资源管理器”。):
将程序参数添加到弹出的文件“ 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... ]