g не создает файл «a.out»

#c #g

#c #g

Вопрос:

кстати, я знаю, что это дубликат, но я не могу найти ответ!

Я пытаюсь создать файл C , который компилирует и запускает другой файл C и проверяет, корректен ли вывод (я знаю, это немного странно).

(в папке на рабочем столе есть eval.cpp и a.out папка «test»
в папке test есть main.cpp , tytytyt.in , tytytyt.out, tytytyt.ok)

eval.cpp

 #include <iostream>
#include <fstream>
#include <bits/stdc  .h>
#include <string>
using namespace std;
ifstream fa("~/Desktop/test/tytytyt.out");
ifstream fok("~/Desktop/test/tytytyt.ok");
string filename;
int a, ok;
int main()
{
    cout << "In ce folder se afla fisierul pe care ai dori sa testezi? n";
    cin >> filename;
    string str = "g   -o a.out"   filename;
    const char * command = str.c_str();
    cout << "Compilare sursa cu ajutorul comenzii " << command << " ... n";
    system(command);
    cout << "Rulare fisier... n";
    system("~/Desktop/test/a.out");
    fa >> a;
    fok >> ok;

    if(a == ok) cout << "Corect!";
    else cout << "Incorect!";
    return 0;
}

  

Когда я запускаю, ~/Desktop$ g eval.cpp он создает a.out файл.
Затем я запускаю ~/Desktop$ ./a.out .
Когда моя программа печатает In ce folder se afla fisierul pe care ai dori sa testezi? и я пишу ~/Desktop/test/main.cpp , программа печатает
Compilare sursa cu ajutorul comenzii g ~/Desktop/test/main.cpp ...
Rulare fisier...
и затем появляется ошибка: sh: 1: /home/steven/Desktop/test/a.out: not found
и если я проверю тестовую папку, файл a.out не существует.

Кто-нибудь может мне помочь? `

Комментарии:

1. Что вы пытаетесь сделать, наконец?

2. проверка правильности выходных данных

3. Почему вы ожидаете, что двоичный файл будет находиться в test подкаталоге? Ни в одной части команды сборки это не упоминается. Вам также, вероятно, понадобится пробел между a.out и именем входного файла.

4. но как я могу поместить a.out в test ?

5. @Stevineon, a.out создается в вашем текущем рабочем каталоге (может быть запрошен с помощью pwd команды), а не в том же каталоге, что и main.cpp

Ответ №1:

Имея

 string str = "g   -o a.out"   filename;
const char * command = str.c_str();
cout << "Compilare sursa cu ajutorul comenzii " << command << " ... n";
system(command);
  

при успешной компиляции файл a.out создается в текущем каталоге, потому что вы не указали, где он должен быть сгенерирован

если вы хотите сгенерировать ~/Desktop/test/a.out , замените

строка str = «g -o a.out» имя файла;

Автор:

 string str = "g   -o ~/Desktop/test/a.out"   filename;
  

за исключением того, что я не понимаю, как может быть выполнена компиляция, потому что после a.out нет пробела, который должен быть разделен именем файла, имя файла задается через cin >> filename; , поэтому это слово и не может начинаться с пробела или другого разделителя, вы уверены, что компиляция была выполнена? Вы даже не тестируете результат работы системы

Для меня это должно быть

 string str = "g   -o ~/Desktop/test/a.out "   filename;
  

Комментарии:

1. Спасибо, теперь я понимаю: D