drj*_*rm3 5 linker makefile compiler-warnings
我的makefile的一部分看起来像这样......
ifdef vis
flg += -framework GLUT -framework OpenGL -Dvis
obj += camfun.o glfuns.o
endif
Run Code Online (Sandbox Code Playgroud)
...
all: driver.cpp header.h $(obj)
$(cc) -o $(exe) driver.cpp $(obj) $(flg) $(lib)
funs.o: header.h funs.cpp
$(cc) -c funs.cpp $(flg)
glfuns.o: header.h glfuns.cpp
$(cc) -c glfuns.cpp $(flg)
camfun.o: header.h camfun.cpp
$(cc) -c camfun.cpp $(flg)
Run Code Online (Sandbox Code Playgroud)
在汇编时给我以下警告:
g++ -c camfun.cpp -Wno-write-strings -O2 -framework GLUT -framework OpenGL -Dvis
i686-apple-darwin10-g++-4.2.1: -framework: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: GLUT: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -framework: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: OpenGL: linker input file unused because linking not done
Run Code Online (Sandbox Code Playgroud)
现在,我知道我收到了警告,因为我肯定应该(-c选项具体告诉它不要链接)!但我想关掉它,我知道我连接的太多了,我很好.我该怎么关掉那个警告?
除非没有传递这些标志,否则无法关闭警告.这并不是说你要链接"太多",它是通过给-c你不链接在所有.如果您将它们发送给不运行链接器的命令,那么应该传递给链接器的任何标志都将显示警告.如果您不想要这些警告,则不要将链接器标志传递给编译器.将makefile中的标志分成两个不同的变量:一个集合同时发送到编译器和链接器(通常是人们使用CFLAGS
它,但它只是一个约定)和一个集合,只发送到链接器(通常LDFLAGS
).
此外,您不应该在all
目标中链接:为可执行文件设置单独的目标,这样如果您连续两次运行make而不进行更改,则第二次调用将不执行任何操作.
在POSIX中,命令选项通常应该在参数之前而不是之后.
当然,使用模式规则有助于避免冗余.
例如:
ifdef vis
ccflg += -Dvis
ldflg += -framework GLUT -framework OpenGL
obj += camfun.o glfuns.o
endif
Run Code Online (Sandbox Code Playgroud)
...
all: $(exe)
$(exe): driver.cpp header.h $(obj)
$(cc) -o $(exe) $(ccflg) $(ldflg) driver.cpp $(obj) $(lib)
%.o: %.cpp header.h
$(cc) -c $(ccflg) $<
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4817 次 |
最近记录: |