我想将 GeometricRecognizer.cpp 包含到 run.cpp 中,我有适用于 CMake 的解决方案(下面提到),我想将它包含在另一个使用 make 的项目中,makefile 的格式也在下面给出。如何使用 makefile 添加 GeometricRecognizer.cpp 的依赖项?
CMake:
ADD_EXECUTABLE(run run.cpp lib/GeometricRecognizer.cpp)
TARGET_LINK_LIBRARIES(run)
制作:
INCS_GTK=-I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0
INCS=-I/usr/include/freetype2 -I/usr/include/mysql -Iframeworks ${INCS_GTK}
LDLIBS=-lconfig++ -lcxcore -lcv -lGL -lGLU -lglut
最佳答案
CMake 文件中的这一行不包含另一个 cpp 文件中的 cpp 文件:
ADD_EXECUTABLE(run a.cpp b.cpp)
它创建一个名为 run
的可执行目标,它是编译 a.cpp
和 b.cpp
并链接这些文件的结果。
在您的 Makefile 中添加以下行:
MAINCXX=${shell find -name '*.cxx'}
TARGETS=${MAINCXX:%.cxx=%}
是实际设置要编译的可执行目标的两行重要代码以及它们是从哪些源文件创建的。从这两行可以看出 MAINCXX
只是源代码树中所有文件 *.cxx
的列表,TARGETS
将是相同的列出没有 .cxx
部分(所以如果 MAINCXX=run.cxx 那么它将是 TARGETS=run.cxx)
您的 makefile 似乎经过大量设计以支持该特定用例,而且真正的 Make 魔法发生在 Makefile 的最后一行,其中包含另一个 Makefile。
您需要查看名为 generic.mk
的文件并了解其设计方式。如果您只想添加另一个目标,您可以添加以下内容:
run: run.cpp lib/GeometricRecognizer.cpp
g++ -o run $(DEFINES) $(INCS) $(WARNINGS) run.cpp lib/GeometricRecognizer.cpp
源文件列表可以用 GNU Make 中的内置变量替换。
关于c++ - 使用 Make 包含一个 .cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001301/