我的C++生成文件无法为每个.cpp代码创建对象文件
My C++ makefile can not create object file for each .cpp code
我的makefile编译我们的C++代码没有任何问题,但它不能创建目标文件。
我需要如何修改此文件才能为每个.cpp
文件创建对象文件?如果我继续不为每个.cpp
文件创建对象文件,是否有任何问题?
我的生成文件如下所示:
engine:main.cpp correlation.cpp correlation.h matcher.cpp matcher.h scheduler.cpp scheduler.h parser.cpp parser.h cache_manager.cpp cache_manager.h init.cpp init.h db_manager.cpp db_manager.h
g++ -o engine main.cpp correlation.cpp correlation.h matcher.cpp matcher.h scheduler.cpp scheduler.h parser.cpp parser.h cache_manager.cpp cache_manager.h init.cpp init.h db_manager.cpp db_manager.h -lpthread -lboost_regex -I/usr/include -ggdb
-I/usr/include/oracle/11.1/client
-L$(ORACLE_HOME)/lib -lclntsh -locci
clean:
rm -f engine
如果跳过命名对象文件,则没有问题。不过,它们仍将在幕后创建。
专门创建目标文件的优点是可以节省重新编译的时间,因为make将能够跳过任何不需要重新创建的对象文件(因为它是最新的;在删除
临时文件时无法使用临时文件)。实现此工作的最简单方法是在 makefile 中使用特殊的占位符语法:
%.o: %.cpp
g++ -c -o $@ $< $(YOUR_OTHER_PARAMS)
在此示例中,您为任何以 .o
结尾的文件定义通用配方,以要求具有以 .cpp
结尾的同名文件。 $@
是一个特殊的宏,它将扩展到当前输出文件,而$<
将包括当前输入文件。
以类似的方式,您也可以为其他文件定义宏:
%.png: %.bmp
myinmageconverter -png $< $@
您仍然可以命名特定的配方,例如,对于一个特定文件需要额外或不同参数的情况。只需像往常一样在生成文件中命名它即可。占位符语法将仅尝试匹配其他不匹配的目标。
如果你想提到一些泛型或预编译头,你仍然可以包含它(就像任何其他依赖项一样):
%.o: %.cpp common.hpp
g++ -c -o $@ $< $(YOUR_OTHER_PARAMS)
对于实际的可执行文件,您可以像往常一样定义组件,即您的示例可能如下所示:
engine: main.o correlation.o matcher.o scheduler.o ...
g++ -o engine main.o correlation. matcher.o ...
%.o: %.cpp
g++ -c -o $@ $< -lpthread -lboost_regex -I/usr/include -ggdb ...
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?