c++ - 如何在 C++ 中使用带有 freopen 的 cmake?

标签 c++

我正在编写一个小型控制台程序,我想将 stdin/stdout 定向到与 cpp 文件位于同一目录中的 txt 文件的读/写。 cpp 看起来像这样:

int main(){
   freopen("in.txt","r",stdin);
   freopen("out.txt","w",stdout);
   //read input
   scanf(...);
   //proccess input
   //proccsing....
   //output
   printf(...);
}

CMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 3.5)
project(ACM)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(ACM ${SOURCE_FILES})

项目构建成功,但没有产生任何输出。检查后我注意到 freopen 找不到 txt 文件。 我应该向 CMakeLists.txt 添加什么以在构建中包含 txt 文件? PS:我是 CMake 的新手,因此不胜感激。

最佳答案

如果您确实需要它来进行调试,请将以下定义添加到 CMakeLists.txt:

add_definitions(-DSRC_PATH="${CMAKE_SOURCE_DIR}")

然后像这样重新打开文件:

freopen(SRC_PATH"/in.txt","r",stdin);
freopen(SRC_PATH"/out.txt","w",stdout);

它在 Linux 上工作,应该在其他类 unix 平台上工作,并且可能需要在 Windows 下使用斜线进行一些额外的操作。无论如何,您可以通过 printf("%s\n", SRC_PATH"/in.txt"); 进行调试。

关于c++ - 如何在 C++ 中使用带有 freopen 的 cmake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384809/

相关文章:

c++ - 异常在构造函数 try block 中被捕获并处理,但仍会再次被重新抛出

c++ - 定义多个具有相同值的#define

c++ - 我的模板语法有什么问题?

c++ - 具有多个 gl_Position 输出的 OpenGL 多渲染目标

c++ - 更改添加隐藏 this 指针的方法是否会破坏二进制兼容性?

c++ - 为什么我不能运行具有特定文件名的 exe?

c++ - 查询大小为 K 的所有连续子数组

c++ - DICOM C_MOVE 与 gdcm 的 "CompositeNetworkFunctions"

c++ - 如何使用字符串find_first_of缓冲区形式(size_t n参数)

C++ 可变参数构造函数 - 传递给父构造函数