Le code est assez simple :
test$ cat test.cpp
int main()
{
}
Y a-t-il un moyen de compiler le code qui provient d'une sortie standard ?
J'ai essayé ceci :
cat test.cpp | g++ -
et quelques variations, mais aucune n'a produit d'exécutable.
Juste quelques clarifications. J'ai un programme qui prétraite un fichier, et produit un autre fichier que je veux compiler. J'ai pensé à ne pas créer ce fichier intermédiaire, mais plutôt produire directement le fichier objet.
2 votes
C'est stdin, pas stdout.
1 votes
Pourquoi les gens sont-ils si intéressés par la compilation à partir de l'entrée standard ? Est-ce si difficile de générer un fichier et de le compiler ?
3 votes
@DavidRodríguez-dribeas Mon slogan est : sauter un intermédiaire :)
1 votes
Eh bien, vous êtes en train de
cat
un fichier ... donc l'intermédiaire est là. Si votre intention était de taper directement dans le compilateur, alors il est probable que pour n'importe quoi n'étant pas absolument trivial, vous fassiez une faute de frappe et deviez retaper (je sais, j'ai utilisécat
comme éditeur quelques fois ce qui est bien si vous ne faites jamais de faute de frappe)...0 votes
Ne fais pas ça. Si tu génères du code C ou C++, génère-le dans un fichier temporaire (peut-être dans un système de fichiers tmpfs comme
/tmp/
), et lance un processusgcc
ou un processusmake
pour le compiler. Lis ma réponse ici0 votes
@DavidRodríguez-dribeas Non, ´cat´ n'est pas là. J'ai autre chose. Un programme qui analyse un en-tête et crée du code qui doit être compilé dans un fichier obj.
0 votes
@BasileStarynkevitch Y a-t-il une raison spécifique de ne pas le faire? Je ne me soucie pas vraiment de la vitesse de la compilation.
0 votes
Lisez ma réponse ici qui donne de nombreuses raisons de ne pas le faire.
0 votes
Pour ma part, j'avais juste besoin de vérifier la présence d'un en-tête. Ainsi, ne pas créer de fichier est plus simple que de le créer puis de le supprimer. Ma solution : ```is_header_present() { header_name=$1 gcc -o /dev/null $CFLAGS -x c++ - <