0

我想将 GeometricRecognizer.cpp 包含到 run.cpp 中,我有适用于 CMake 的解决方案(下文提到),我想将它包含在另一个使用 make 格式的项目中,下面也给出了。如何添加依赖项使用 makefile 的 GeometricRecognizer.cpp ?

制作:

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 
4

1 回答 1

3

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中所有文件的列表,并且只是没有部分的相同列表(所以如果 MAINCXX=run.cxx 那么它将是 TARGETS=run.cxx)*.cxxTARGETS.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 中的内置变量替换。

于 2012-10-21T21:11:56.203 回答