是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
Is there a proper way to use template commands for object files in a makefile? (C++)
我目前正在尝试创建一个模板make命令,该命令应该根据cpp/头文件创建%.obj。 我目前在我的文件夹中有以下文件:main.cpp,sort.cpp,sort.h 这是我尝试运行的生成文件:
CXX = cl
CXXFLAGS = /EHsc /nologo
MAIN_EXECUTABLE = main.exe
%.obj: %.cpp %.h
$(CXX) $(CXXFLAGS) /c $<
$(MAIN_EXECUTABLE): main.obj sort.obj
link $(CXXFLAGS) $^ /OUT:$@
all: $(MAIN_EXECUTABLE)
.PHONY: all
clean:
del *.obj
.PHONY: clean
distclean: clean
del $(MAIN_EXECUTABLE)
.PHONY: distclean
控制台输出:make: *** No rule to make target `main.obj', needed by `main.exe'.
所以我的问题是,我该如何解决这个问题?谢谢!
不能将%.h
添加到模式规则中,除非要使用此模式规则构建的每个.cpp
文件都具有等效的.h
文件。 否则,当 make 想要使用此模式规则构建main.obj
时,它会看到main.cpp
存在,并且确实存在,然后它会看到main.h
存在,而不存在,因此模式规则不匹配。 Make 一直在寻找可能构建main.obj
但没有其他模式规则,因此您会看到错误。
您有两种选择:如果几乎所有.cpp
文件都有.h
文件,那么您可以为少数不喜欢这样做的文件创建明确的规则:
%.obj : %.cpp %.h
$(CXX) $(CXXFLAGS) /c $<
main.obj : main.cpp
$(CXX) $(CXXFLAGS) /c $<
或者,您可以省略%.h
并在其他地方声明标头先决条件,如下所示:
%.obj : %.cpp
$(CXX) $(CXXFLAGS) /c $<
sort.obj : sort.h
后者是通常编写makefile的方式,因为.cpp
文件只包含一个头文件几乎闻所未闻;通常无论如何,您都需要将所有标头声明为先决条件。 通常,这是通过向生成文件添加自动依赖项生成工具来完成的。
我会说你似乎运行在Windows上,而不是像GNU/Linux或MacOS这样的基于POSIX的系统,所以依赖于GCC或Clang等编译器功能的自动依赖生成方法可能对你不可用。
相关文章:
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- g++ -I 和 -L 命令来查找不起作用的 .hpp 文件
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 通过命令行在Visual Studio中编译单个独立文件
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 是否可以在命令行中将输入参数传递给可执行文件
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 使用 MinGW 在 Windows 上的命令行编译C++文件
- 程序运行,但文件无法打开.C++中的命令行
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- make 命令创建 .file,但不创建应用程序文件
- 如何在 vscode 扩展名中检索 C/C++ 文件的编译命令
- clang 交叉编译命令找不到头文件
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 为什么文件命令声明可执行文件包含"debug_info"
- 使用提升程序选项通过配置文件/命令行解析自定义对象
- 将 -m32 参数添加到生成文件命令
- MSI 文件命令行参数解析
- C++中的批处理文件命令