使用Make包含.cpp文件

时间:2012-10-21 19:20:26

标签: c++ makefile cmake

我想将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 

1 个答案:

答案 0 :(得分:3)

CMake文件中的这一行不包含另一个cpp文件中的cpp文件:

ADD_EXECUTABLE(run a.cpp b.cpp)

它会创建一个名为run的可执行目标,这是编译a.cppb.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中的内置变量替换。