Вы не «связываете» текстовый файл с исполняемым файлом. В CLion стандартным поведением является сборка двоичного файла проекта в папку с именем cmake-build-debug
. Текстовый файл, который вы хотите использовать в качестве входных данных, должен находиться в том же каталоге, что и файл .exe
, а не .cpp
, поэтому в этом случае вы должны добавить ../
к имени текстовый файл (т. е. если ваш файл называется input.txt
, код C скажет что-то вроде
FILE* input_file = fopen("../input.txt", "r");
Не забудьте проверить коды возврата, ошибки и т. Д.
<час />
Приведенное выше решение не подходит по разным причинам; Прежде всего, вы жестко кодируете имя файла, которое в лучшем случае является огромным ограничением, а в худшем - бессмысленным. Лучшим решением было бы передать имя файла через командную строку.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if (argc != 2) { return EXIT_FAILURE; }
FILE* inputFile = fopen(argv[1], "r");
...
return EXIT_SUCCESS;
}
Это решение все еще невелико, в первую очередь потому, что вы всегда должны дезинфицировать свои входные данные, а не просто принимать вводимые пользователем строки и просто сразу их использовать. Это огромная ответственность за безопасность. Я также не проверял коды возврата или что-то еще; Я просто проверил argc
было два. (Помните, что программа всегда будет иметь argc
, по крайней мере, равную 1
, поскольку первый аргумент - это имя программы.)
<час />
Чтобы ответить на ваш фактический вопрос (тот, который вы задали, но не обязательно тот, на который вам нужен был ответ), вы можете использовать функцию find_file
CMake , чтобы "связать" файл. На самом деле вы ничего не связываете, на самом деле, функция find_file
просто возвращает полный путь к именованному файлу, но затем вы можете передать эту информацию в качестве параметра в вашу программу, как обсуждалось ранее.
Вы можете сделать больше, чем могло бы быть сразу очевидно с CMake, на самом деле; здесь - документация для их функций, связанных с файлами.
Вы также можете запустить только что созданную программу из CMake напрямую, используя функцию execute_process
. Функция на самом деле напрямую принимает параметр INPUT_FILE
, поэтому вы можете установить переменную для пути вашего входного файла, установить его, используя результат find_file
, а затем напрямую запустить программу с вашим входным файлом, используя execute_process
.