CLion C++无法读取/打开项目目录中的普通文件
CLion C++ can't read/open plain file in project directory
我在项目目录中有.in文件,当我使用绝对路径打开文件时,它可以工作,但相对路径不工作。
directoy内容
main.cpp
CMakeLists.txt
milk2.in
CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(project)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp )
add_executable(project ${SOURCE_FILES})
main.cpp
#include <iostream>
using namespace std;
int main() {
pair<int, int> periods[5000];
int lineCount = 0;
freopen("milk2.in", "r", stdin);
cin >> lineCount;
for (int j = 0; j < lineCount; ++j) {
cin >> periods[j].first >> periods[j].second;
}
int startNode = periods[0].first, endNode = periods[0].second, milkMax = 0, freeMax = 0;
for (int i = 1; i < lineCount; ++i) {
if (periods[i].first <= endNode) {
endNode = periods[i].second;
if ((endNode - startNode) > milkMax)
milkMax = endNode - startNode;
} else {
if ((periods[i].first - endNode) > freeMax)
freeMax = periods[i].first - endNode;
}
}
cout << milkMax << " " << freeMax << endl;
}
代码中没有错误,但不能读取具有相对路径的文件内容。
这是因为运行时目录与项目源目录不同。
我能想到的最简单的解决方案是定义一个等于项目源目录的宏,让程序将其工作目录更改为该目录,然后打开文件。
要做到这一点,您需要像一样修改CMakeLists.txt
文件
cmake_minimum_required(VERSION 3.3)
project(project)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp )
add_executable(project ${SOURCE_FILES})
target_compile_definitions(project
PUBLIC -DPROJECT_DIRECTORY="${CMAKE_SOURCE_DIR}")
然后在您的main.cpp
文件中:
// Header file for chdir call
#ifdef __linux__
# include <unistd.h>
#endif
#ifdef _WIN32
# include <direct.h>
#endif
int main() {
#ifdef __linux__
chdir(PROJECT_DIRECTORY);
#endif
#ifdef _WIN32
_chdir(PROJECT_DIRECTORY);
#endif
// Rest of code here...
}
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- Eclipse CDT:单个项目中有多个C++文件
- Visual Studio跨平台生成文件项目,找不到命令
- C :多文件C 项目中的相互引用的结构
- 正确地在多文件项目中#CRUDING SDL
- 如何将我的生成文件项目导入QtCreator
- 不更改生成文件后,生成文件项目不会生成(几乎相同的生成,工作正常)
- 模板类多文件项目 - 如何
- 崇高文本不编译C++多文件项目
- 无法调试C++日食生成文件项目
- 如何正确构建 OOP 和多文件项目
- 3 文件项目中未定义引用中的 C++ 命名空间
- 创建一个可以在 Windows 环境中的现有生成文件项目上运行的 clang 工具
- CodeRunner 和多个文件项目
- 在Turbo c++中编译多文件项目
- 链接.o (C对象文件)到Linux上的c++文件/项目
- 生成文件项目 - 防止通过"-j"参数使用多个作业时生成失败
- visual studio 2012-仅限C++头文件项目-从不同程序集使用