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

标签 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 

最佳答案

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 中的内置变量替换。

关于c++ - 使用 Make 包含一个 .cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001301/

相关文章:

c++ - Qt5迁移: Cannot open include file: 'qtconcurrentexception.h' : No such file or directory

C++:设计对象以对系统中的唯一项建模

ubuntu - 制作文件中可能出现的错误(UBuntu)

makefile - 内核驱动程序外部模块未完全构建

cmake - 如何在 CMake 中输出生成器表达式的结果?

cmake - 如何清除/删除缓存变量

C++:编译器仅按需实例化模板函数?

c++ - 具有常量参数时的模板特化

c - GNU make 的回溯

c++ - 如何通过 vcpkg 在 Windows 中使用 Facebook Wangle