Nik*_*s R 6 c++ windows makefile gnu-make
我有几个C++文件分布在几个文件夹中.
a_library/
file1.cpp
file2.cpp
category1/
file3.cpp
file4.cpp
Run Code Online (Sandbox Code Playgroud)
他们被保证具有独特的名称.我想编译所有这些C++文件以分离目录中的Object文件obj/.
我有一个包含相对路径的所有源文件的列表,以及它们对应的目标名称.
a_library/file1.cpp
a_library/file2.cpp
a_library/category1/file3.cpp
a_library/category1/file4.cpp
obj/file1.obj
obj/file2.obj
obj/file3.obj
obj/file4.obj
Run Code Online (Sandbox Code Playgroud)
如何制定将C++文件从第一个列表转换为第二个列表中的对象文件的规则?
这些尝试都不能工作:
obj/%.obj: %:cpp
# ...
%.obj: %.cpp
# ...
.cpp.obj:
# ...
Run Code Online (Sandbox Code Playgroud)
我不想写这样的规则:
obj/%.obj: a_library/%.cpp
# ...
obj/%.obj: a_library/category1/%.cpp
# ...
Run Code Online (Sandbox Code Playgroud)
尝试设置VPATH:
VPATH = a_library:a_library/category1
obj/%.o: %.cpp
$(CXX) -c $(CPPFLAGS) $(CFLAGS) $(CXXFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
并添加完整的文件列表(我建议您明确列出文件,不要使用$(wildcard ...)函数)和链接应用程序:
files := main.cpp $(wildcard a_library/*.cpp) a_library/category1/file.cpp
obj/application: $(patsubst %.cpp,obj/%.o,$(notdir $(files)))
$(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $+
Run Code Online (Sandbox Code Playgroud)
该$(wildcard)有一个恼人的趋势拿起任何东西的目录,如一次性的测试文件或临时对象(如果他们碰巧有一个合适的名字:~file.cpp).
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |