Добавление аргументов командной строки в проект

мой вопрос несколько похож на этот так но не так же.

Я создал 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... ]