Use NMAKE to make all source in a directory?

蹲街弑〆低调 提交于 2019-12-02 09:49:51

问题


Using nmake, is it possible to have the makefile build all the .cpp files in the current directory automatically, without having to specify them individually?

So, instead of something like:

O = $(OBJ_DIR)/main.obj
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj:
    ---COMPILE $< HERE---

I'd like to avoid having to specify each obj to make. Can this be done?


回答1:


.cpp.obj:
    $(CC) $(CFLAGS) $*.cpp

is a default rule that will automatically resolve .obj dependencies from .cpp files...




回答2:


You can use a rule like this:

{src\mystuff}.c{tmp\src\mystuff}.obj::
    $(CC) /nologo $(CFLAGS) /c /Fotmp\src\mystuff\ $<

which will find and compile all the .c files in src\mystuff and put the object files in tmp\src\mystuff. Substitute .cpp for .c in your case.

Note that the first character on the second line should be a tab, not spaces.

Also, $(CC) is predefined by nmake to be cl, and you can add any compiler flags you need to $(CFLAGS), hard-code them in the rule or add a different variable there, as you prefer.




回答3:


One possibility is to wrap the make in a script.

Either use a for loop, calling make on each .cpp file or construct a list of cpp files and use it as a parameter to the makefile.




回答4:


You can run a shell command during nmakefile preprocessing, and then !include the output. Naturally the output needs to be in nmake format. Something like:

!if [bash -c "echo O = *.cpp" >sources.mak]
!error Failed to generate source list
!endif
!include sources.mak

all: $(O:.cpp=.obj)

.cpp.obj:
    ---COMPILE $< HERE---

I suspect that most people would not use bash to create sources.mak, but you get the idea.




回答5:


I think this can be done with wild cards in GNU make (and IIRC you can run it on windows). Aside from that, I'm sorry but I don't known nmake.



来源:https://stackoverflow.com/questions/841597/use-nmake-to-make-all-source-in-a-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!