我有以下生成文件:GNU發出奇怪的可變取代
CPPCOMPILER=g++
CCOMPILER=gcc
#CPPCOMPILER=i586-mingw32msvc-g++
FLAGS=-Wall -g -O3
LIBRARIES=-lpthread
MODULES=obj/HTTPRequest.o obj/main.o obj/Server.o obj/SocketUtils.o obj/HTTPServer.o \
obj/CookieManager.o obj/FileLister.o
STATIC=obj/static/files.html.o obj/static/login.html.o
all: $(MODULES) $(STATIC)
$(CPPCOMPILER) $(MODULES) $(STATIC) $(LIBRARIES) -o httpserver
obj/main.o : main.cpp
@mkdir -p obj
$(CPPCOMPILER) -c $(FLAGS) $< -o [email protected]
obj/static/%.o : %
@mkdir -p obj/static
file2obj $< $(subst .,_,$<) > $<.c
$(CCOMPILER) $<.c -o [email protected] -c $(FLAGS) #<-------***THIS LINE***
obj/%.o : %.cpp %.h
@mkdir -p obj
$(CPPCOMPILER) -c $(FLAGS) $< -o [email protected]
clean:
rm -rf $(STATIC) $(MODULES) httpserver
我有files.html
爲其file2obj
射出C源代碼。此代碼被編譯爲.o文件。
然而,make
過程有點不同於我的預期。下面是輸出:
[email protected]:~/Code/HTTPFileSharer$ make
cc files.html.c -o files.html #<--------- ****THIS LINE!****
[and more linker errors here because of wrong command]
make: *** [files.html] Error 1
- 如何
cc
被調用在這種情況下?我期待gcc
。 (我也在另一個項目中遇到過類似的問題,但結果並不嚴重。) - 而且它怎麼會吃掉一些參數呢?還有
-o
參數有誤。(我得到-o files.html
) - 幾次
files.html
被刪除。任何想法可以成爲背後的原因?
我使用的是GNU make 3.81。
我的Makefile代碼有什麼問題嗎?或者它是GNU/make中的一些已知錯誤?
任何意見/指針/ suggestiosn將不勝感激:-)
感謝
UPDATE
我把這裏還有一種情況,在那裏我面臨着類似的問題。
的Makefile:
CPPCOMPILER=g++
CCOMPILER=gcc
FLAGS=-Wall -pg -O3
LIBRARIES=`pkg-config --libs libglfw` -lm -lGLU -lGL -lXrandr
UNITS=obj/main.o obj/TextureManager.o obj/Thread.o obj/Tile.o obj/PictureTile.o obj/Coverflow.o obj/Vector3D.o \
obj/TilePopulator.o obj/FileLister.o
SOIL_DEPENDS=soil/image_DXT.c soil/image_helper.c soil/SOIL.c soil/stbi_DDS_aug_c.h soil/stb_image_aug.c \
soil/image_DXT.h soil/image_helper.h soil/SOIL.h soil/stbi_DDS_aug.h soil/stb_image_aug.h
SOIL_UNITS=obj/soil/image_DXT.o obj/soil/image_helper.o obj/soil/SOIL.o soil/stb_image_aug.o
all: $(SOIL_UNITS) $(UNITS)
$(CPPCOMPILER) $(FLAGS) $(SOIL_UNITS) $(UNITS) $(LIBRARIES) -o coverflow
obj/soil/%.o : soil/%.c
@mkdir -p obj/soil
$(CCOMPILER) -c $< -o [email protected] #<--Issue in this line
obj/main.o : main.cpp
@mkdir -p obj
$(CPPCOMPILER) -c $(FLAGS) $< -o [email protected]
obj/%.o : %.cpp %.h
@mkdir -p obj
$(CPPCOMPILER) -c $(FLAGS) $< -o [email protected]
clean:
rm -rf $(UNITS) $(SOIL_UNITS) coverflow
OUTPUT:
[email protected]:~/Code/Skroll$ make
gcc -c soil/image_DXT.c -o obj/soil/image_DXT.o
gcc -c soil/image_helper.c -o obj/soil/image_helper.o
gcc -c soil/SOIL.c -o obj/soil/SOIL.o
cc -c -o soil/stb_image_aug.o soil/stb_image_aug.c #<-----**THIS LINE**
g++ -c -Wall -pg -O3 main.cpp -o obj/main.o
g++ -c -Wall -pg -O3 TextureManager.cpp -o obj/TextureManager.o
g++ -c -Wall -pg -O3 Thread.cpp -o obj/Thread.o
g++ -c -Wall -pg -O3 Tile.cpp -o obj/Tile.o
g++ -c -Wall -pg -O3 PictureTile.cpp -o obj/PictureTile.o
g++ -c -Wall -pg -O3 Coverflow.cpp -o obj/Coverflow.o
g++ -c -Wall -pg -O3 Vector3D.cpp -o obj/Vector3D.o
g++ -c -Wall -pg -O3 TilePopulator.cpp -o obj/TilePopulator.o
g++ -c -Wall -pg -O3 FileLister.cpp -o obj/FileLister.o
g++ -Wall -pg -O3 obj/soil/image_DXT.o obj/soil/image_helper.o obj/soil/SOIL.o soil/stb_image_aug.o obj/main.o obj/TextureManager.o obj/Thread.o obj/Tile.o obj/PictureTile.o obj/Coverflow.o obj/Vector3D.o obj/TilePopulator.o obj/FileLister.o `pkg- config --libs libglfw` -lm -lGLU -lGL -lXrandr -o coverflow
如果'files.html.c'比'files.html'更新,爲什麼不*要*重建'files.html'? – Beta 2012-02-19 15:08:45
@貝塔我沒有得到你想要建議的。使用'file2obj'應用程序生成'files.html.c'(後來編譯成目標文件)。 – SuperSaiyan 2012-02-19 16:08:43