Добавление аргументов командной строки в проект
мой вопрос несколько похож на этот так но не так же.
Я создал HelloWorld
программы следующие:
add_executable( HelloWorld ${SRC} )
когда я создаю файл проекта (например, Visual Studio .файл sln или XCode .xcodeproj file). Я хочу нажать кнопку run и передать некоторые аргументы командной строки в HelloWorld
когда он выполняет программу, например:
./HelloWorld --gtest_filter=Test_Cases1*
Также см. Этот так как это делается в Visual Studio.
можно ли это сделать в файле CMakeList? Если нет, то почему?
4 ответов
CMake не имеет встроенной поддержки для этого. Причина в том, что параметры Debugging
вкладка свойств проекта Visual Studio не сохраняются в файле проекта (.vc[x]proj
), но в специфичном для пользователя и машины .user
file, и CMake не генерирует их.
вы можете кодировать его самостоятельно в CMake (я сделал это для нашей структуры на работе). Файл просто XML, так что вы можете предварительно заполнить его в соответствии с вашими потребностями. Его структуру довольно легко понять. Командная строка аргументы для отлаживаемой программы хранятся в внутри <DebugSettings>
элемент XML (вложенный в <Configurations><Configuration>
), например.
В случае, если вы хотите добавить E:\dev\IfcPL\examples\Trassierung.ifc
в качестве аргумента для проекта сборки отладки в Visual Studio 2017:
CMake 3.13.0 похоже, что это будет добавить поддержку для этого в виде следующих целевых свойств:
-
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++.
не трюк 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... ]