Как остановить мой .exe от исчезновения при использовании CMake - PullRequest
0 голосов
/ 28 июня 2018

Я использую cmake для сборки своего проекта из командной строки. Проблема в том, что как только исполняемый файл завершает работу, он сразу же исчезает, и у меня остается всего лишь миллисекунды содержимого, которое выводится на экран. Я не могу много читать в миллисекундах. Что я могу сделать, чтобы экран консоли не исчезал, как только он завершил работу?

вот мой CMakeLists.txt:

   cmake_minimum_required(VERSION 2.8)

project(TotallyFree C)

add_executable(Acrolibre acrolibre.c)

set(LIBSRC acrodict.c acrodict.h)

add_library(acrodict ${LIBSRC})

add_executable(Acrodictlibre acrolibre.c)

target_link_libraries(Acrodictlibre acrodict)

set_target_properties(Acrodictlibre PROPERTIES COMPILE_FLAGS "-DUSE_ACRODICT")

и вот мой эквивалент main.cpp:

//#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifdef USE_ACRODICT
#include "acrodict.h"
#endif

int main(int argc, char* argv[])
{
    //int waitTime = 10000000;
    const char* name;
#ifdef USE_ACRODICT
    const acroItem_t* item;
#endif

    if(argc < 2)
    {
        fprintf(stderr, "%s: you need one argument\n", argv[0]);
        fprintf(stderr, "%s <name>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    name = argv[1];

#ifndef USE_ACRODICT
    //if(strcasecmp(name, "toulibre")==0){
    if(_stricmp(name, "toulibre")==0){
        printf("Toulibre is a French organization promoting FLOSS.\n");
    }
#else
    item = acrodict_get(name);
    if(NULL != item){
        printf("%s: %s\n", item->name, item->description);
    }else if(item = acrodict_get(name)){
        printf("<%s> is unknown maybe you mean:\n", name);
        printf("%s: %s\n", item->name, item->description);
    }
#endif
    else{
        printf("Sorry, I don't know: <%s>\n", name);
        //Sleep(waitTime);
        return EXIT_FAILURE;
    }
    //Sleep(waitTime);
    return EXIT_SUCCESS;
}

Как вы можете видеть, я даже использовал Sleep () и #include, чтобы отложить отключение консоли. Но это не работает. Кто-нибудь может порекомендовать?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это не имеет ничего общего с CMake, и все, что связано с тем, как вы запускаете ваше приложение.

Если дважды щелкнуть консольный EXE-файл в Windows, он откроет новую консоль, запустит программу и закроет консоль, если она лежит.

У вас есть два варианта:

  • Запустить программу из командной строки уже открытой консоли (cmd.exe)

  • Добавить этот код в конец main:

 printf("Press Enter to exit\n");
 getchar();
0 голосов
/ 28 июня 2018

Проблема здесь не в файлах make. Ваша программа завершается, и окно консоли исчезает. Попробуйте использовать getch() перед возвратом из main(), чтобы программа подождала любую клавишу перед выходом. Или вы можете запустить вашу программу из консоли.

...