Проблема с помощью файлов makefile .gch вместо файлов -- c++ поле с участием makefile поле с участием precompiled-headers пол Связанный проблема

Problem with makefile making .gch files instead of.o files


3
vote

проблема

русский

Итак, я делаю программу для проверки эффективности определенных структур данных. У меня есть все файлы .h, и я сделал очень ужасную Makefile, что, вероятно, неправильно, хотя, кажется, работает до точки. Вместо того, чтобы сделать файлы, это делает файлы .gch, поэтому, когда он пытается предпринять все файлы .o, которые они не найдены. Это мой makefile

 <код> prog1: main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o                 g++ -Wall -g -o prog1 main.o dsexceptions.h.gch BinarySearchTree.h.gch SplayTree.h.gch RedBlackTree.h.gch AvlTree.h.gch  main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h                 g++ -Wall -g -c main.cpp  #shape.o: shape.cpp shape.h grid.h #               g++ -Wall -g -c shape.cpp  dsexceptions.o: dsexceptions.h                 g++ -Wall -g -c dsexceptions.h  BinarySearchTree.o: BinarySearchTree.h dsexceptions.h                     g++ -Wall -g -c BinarySearchTree.h  SplayTree.o: SplayTree.h dsexceptions.h              g++ -Wall -g -c SplayTree.h  RedBlackTree.o: RedBlackTree.h dsexceptions.h                 g++ -Wall -g -c RedBlackTree.h  AvlTree.o: AvlTree.h dsexceptions.h            g++ -Wall -g -c AvlTree.h  clean:                 rm -f main main.exe  main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o *.gch   
Английский оригинал

So, I'm making a program to test the efficiency of certain data structures. I have all the .h files and I made a very terrible makefile that probably is wrong, although it seems to work up to a point. Instead of making .o files it makes .gch files, so when it tries to acces all the .o files they are not found. This is my makefile

prog1: main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o                 g++ -Wall -g -o prog1 main.o dsexceptions.h.gch BinarySearchTree.h.gch SplayTree.h.gch RedBlackTree.h.gch AvlTree.h.gch  main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h                 g++ -Wall -g -c main.cpp  #shape.o: shape.cpp shape.h grid.h #               g++ -Wall -g -c shape.cpp  dsexceptions.o: dsexceptions.h                 g++ -Wall -g -c dsexceptions.h  BinarySearchTree.o: BinarySearchTree.h dsexceptions.h                     g++ -Wall -g -c BinarySearchTree.h  SplayTree.o: SplayTree.h dsexceptions.h              g++ -Wall -g -c SplayTree.h  RedBlackTree.o: RedBlackTree.h dsexceptions.h                 g++ -Wall -g -c RedBlackTree.h  AvlTree.o: AvlTree.h dsexceptions.h            g++ -Wall -g -c AvlTree.h  clean:                 rm -f main main.exe  main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o *.gch 
</div
        

Список ответов

18
 
vote

Вы не хотите кормить ваши файлы .h к компилятору. Совместите только файл .cpp, который должен включать ваши файлы .h. (Файлы .gch представляют собой предложенные заголовки.) Вам не нужны файлы для ваших заголовков, просто # inClude их в вашем файле .CPP.

 <код> prog1: main.o         g++ -Wall -g -o prog1 main.o  main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h         g++ -Wall -g -c main.cpp  clean:         rm -f prog1 main.o   

 

You don't want to feed your .h files to the compiler. Only compile the .cpp file, which should include your .h files. (The .gch files are precompiled headers.) You don't need .o files for your headers, just #include them in your .cpp file.

prog1: main.o         g++ -Wall -g -o prog1 main.o  main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h         g++ -Wall -g -c main.cpp  clean:         rm -f prog1 main.o 
</div
 
 
1
 
vote

У вас уже есть решение из BSTPierre, но просто для удовольствия вот моя версия вашего makefile:

. CC = G ++ -Wall -G -O $ @  Модуль = avltree binarysearchtree redblacktree splaytree Объекты = $ (Adddsuffix .o, $ (модули))  prog1: main.o dsexceptions.o $ (объекты)        $ (CC) $ ^  Main.O: $ (Addsuffix .h, $ (модули))  $ (Объекты) Main.O:% .CPP% .h dsexceptions.h     $ (CC) -C $ & AMP; LT  чистый:  RM -F Main Main.exe * .o * .gch 
 

You already have the solution from bstpierre, but just for fun here's my version of your makefile:

 CC = g++ -Wall -g -o $@  MODULE = AvlTree BinarySearchTree RedBlackTree SplayTree OBJECTS = $(addsuffix .o,$(MODULES))  prog1: main.o dsexceptions.o $(OBJECTS)        $(CC) $^   main.o: $(addsuffix .h,$(MODULES))  $(OBJECTS) main.o : %.cpp %.h dsexceptions.h     $(CC) -c $&lt  clean:  rm -f main main.exe *.o *.gch 
</div
 
 
1
 
vote

И только для хорошей меры, вот мой сказок, потому что списка намного лучше :)

 <код> using System; using System.IO;  namespace StackOverflowQA {     class Program      {           static void Main(string[] args)          {             if(File.Exists(@"C:ExerciseDerp"))              {                DoWork();              }              else              {                Console.Out.Writelne("Wrong kid died");                Console.Write("Enter a key to exit");                Console.Read();              }              private static void DoWork()             {                //-- if you get to this point then check out that,              //    NuGet pkg you're working with (WinSCP) and proceed! :)              }          }        }  } 0  

Вы можете посмотреть на Scons Здесь .

 

And just for good measure, here is my SConstruct, because SCons's so much better :)

Program('main.cpp') # Yeah, it's that simple :) 

You can look at SCons here.

</div
 
 

Связанный проблема

0  Использование Pybind11 на MacBook Pro  ( Using pybind11 on macbook pro ) 
Я пытаюсь использовать Pybind11 на MacBook, и я пытаюсь сделать так, как было написано в https://pybind11.readtheDocs.io/en/stable/basics.html я установил C...

58  Пространства имен в C  ( Namespaces in c ) 
Есть ли способ (ab) использовать препроцессор c для эмуляции пространств имен в c ? Я думаю что-то по этим строкам: <код> #define NAMESPACE name_of_ns ...

7  Как очистить удаленные объекты в C ++  ( How do clean up deleted objects in c ) 
Возможно ли использовать память об удаленных объектах в C ++? Я хочу сделать это, чтобы воспроизвести Coredump в модульном тесте: <код> //Some member variab...

42  Как я могу легко увидеть график C / C ++ #include? [закрыто]  ( How can i see the c c include graph easily ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

1  Шаблон аргументирован вычет и объединение  ( Template argument deduction and unification ) 
<код> template<typename T> void f1(T t); template<typename T> void f2(const T t); template<typename T> void f3(T& t); template<typename T> void f4(const T...

-1  Qt показывает изображение на 1/4 секунды  ( Qt show an image for 1 4 of a second ) 
Эй, я пробовал несколько раз, чтобы завершить это, используя Uslep или Qt Sleep, когда показывает изображение, но иногда (почти каждый раз) он появляется белы...

0  Что это значит, когда в GraphStudio нет ошибки при подключении два фильтра, но они не были подключены  ( What does it mean when in graphstudio there is no error when connection two filt ) 
Когда я пытаюсь подключить два фильтра в GraphStudio, которые не соответствуют, я обычно получаю код ошибки. Однако в моем случае, если я попытаюсь подключить...

18  Как оценивается оператор «если (A && B)»?  ( How an if a b statement is evaluated ) 
<код> -1 Вопрос в том, что утверждение немедленно сломается, чтобы остальное, если был ложный. Будет б даже оценивать? Я спрашиваю это в том случае, если...

-1  C ++ с использованием класса от заголовка в классе  ( C using a class from a header within a class ) 
У меня есть немного проблемы с классами, используемыми в классах, из файлов заголовка. У меня есть время занятий во времени. Как: <код> #ifndef TIME_H #de...

7  Используйте простой класс C ++ в Android NDK  ( Use a simple c class in android ndk ) 
Я пытаюсь узнать основные основы Android NDK, но я застрял, когда я должен использовать его с классом C ++. Я понимаю, как использовать его с помощью просто...

0  Установите и получите значение разных участников класса в классе  ( Set and get the value of different class members in a class ) 
Я очень новичок в программировании C ++, и я написал простую классную программу для отображения имени и продолжительности проекта. <код> #include<iostream> ...

0  Как скопировать файлы из установленного местоположения в изолированное хранение в Windows Phone 8  ( How to copy files from installed location to isolated storage in windows phone 8 ) 
Я разрабатываю приложение для WP8 с помощью Cocos2DX. Я не могу найти функцию копирования, которая помогает мне копировать файлы с установленного местоположен...

1  Eclipse C / C ++ не компилируют исходный код в подпункте  ( Eclipse c c not compiling source code in sub folders ) 
Использование ECLIPSE IDE для разработчиков C / C ++ (см. подробности ниже) Я пытаюсь реорганизовать свой код в подпункте. Однако, если я перемещаю файл исход...

-2  Как писать сортировать с неизвестным аргументом. Не может повторяться с void * /  ( How write sort with unknown argument cant iterate with void ) 
в этом <код> void* ic = b + j * sz; и это <код> void* jc = ic - sz; lines IDE, написание того, что выражение должно быть указателем на полный тип. Мне нужен...

10  Как я могу обнаружить доступ к файлу в Linux?  ( How can i detect file accesses in linux ) 
У меня есть куча потоков и приложений для обработки данных, которые я иногда нужно шпионить, то есть мне нужно знать, какие файлы они читают. Это в основном, ...

Связанный проблема

0  Использование Pybind11 на MacBook Pro 
58  Пространства имен в C 
7  Как очистить удаленные объекты в C ++ 
42  Как я могу легко увидеть график C / C ++ #include? [закрыто] 
1  Шаблон аргументирован вычет и объединение 
-1  Qt показывает изображение на 1/4 секунды 
0  Что это значит, когда в GraphStudio нет ошибки при подключении два фильтра, но они не были подключены 
18  Как оценивается оператор «если (A && B)»? 
-1  C ++ с использованием класса от заголовка в классе 
7  Используйте простой класс C ++ в Android NDK 
0  Установите и получите значение разных участников класса в классе 
0  Как скопировать файлы из установленного местоположения в изолированное хранение в Windows Phone 8 
1  Eclipse C / C ++ не компилируют исходный код в подпункте 
-2  Как писать сортировать с неизвестным аргументом. Не может повторяться с void * / 
10  Как я могу обнаружить доступ к файлу в Linux? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.