C++ 使用Make包含一个.cpp文件

C++ 使用Make包含一个.cpp文件,c++,makefile,cmake,C++,Makefile,Cmake,我想在run.cpp中包含geometrycrecognizer.cpp,我有一个CMake的解决方案(如下所述),我想在另一个使用makefile格式的项目中包含它。下面也给出了makefile的格式。如何使用makefile添加geometrycrecognizer.cpp的依赖关系 CMake: ADD_EXECUTABLE(run run.cpp lib/GeometricRecognizer.cpp) TARGET_LINK_LIBRARIES(run) 制作: INCS_GTK=-

我想在run.cpp中包含geometrycrecognizer.cpp,我有一个CMake的解决方案(如下所述),我想在另一个使用makefile格式的项目中包含它。下面也给出了makefile的格式。如何使用makefile添加geometrycrecognizer.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似乎在很大程度上是为支持特定用例而设计的,而且真正的makefile魔术发生在makefile的最后一行,其中包含另一个makefile

您需要查看名为
generic.mk
的文件,了解它是如何设计的。如果只想添加另一个目标,可以添加以下内容:

 run: run.cpp lib/GeometricRecognizer.cpp
     g++ -o run $(DEFINES) $(INCS) $(WARNINGS) run.cpp lib/GeometricRecognizer.cpp 

源文件列表可以替换为GNU Make中的内置变量。

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似乎在很大程度上是为支持特定用例而设计的,而且真正的makefile魔术发生在makefile的最后一行,其中包含另一个makefile

您需要查看名为
generic.mk
的文件,了解它是如何设计的。如果只想添加另一个目标,可以添加以下内容:

 run: run.cpp lib/GeometricRecognizer.cpp
     g++ -o run $(DEFINES) $(INCS) $(WARNINGS) run.cpp lib/GeometricRecognizer.cpp 

源文件列表可以替换为GNU Make中的内置变量。

编辑,格式化导致了问题三行?这就是整个Makefile?我真的很怀疑。这是一个小部分,这里是整个makefile编辑,格式是造成问题的三行?这就是整个Makefile?我真的很怀疑。那只是一小部分,这是整个makefile