使用CMake时如何阻止我的.exe消失

时间:2018-06-28 11:01:10

标签: c cmake command-line-interface

我正在使用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 :(得分:0)

问题不在此处的make文件中。程序退出,控制台窗口消失。从getch()返回之前,请尝试使用main(),以使程序在退出之前等待任何键。或者,您可以从控制台运行程序。

答案 1 :(得分:0)

这与CMake无关,与您运行应用程序的方式无关。

在Windows中双击控制台EXE时,它会打开一个新的控制台,运行该程序,然后关闭该控制台。

您有两个选择:

  • 从已经打开的控制台(cmd.exe)的命令行运行程序

  • 将此代码添加到main的末尾:

 printf("Press Enter to exit\n");
 getchar();