c++ - Makefile 编译当前目录和所有子目录中的所有 .cpp 文件

标签 c++ dll makefile

我熟悉如何创建基本的 makefile,但我正在尝试从我当前目录和所有子目录中的所有 .cpp 文件创建一个 .dylib(如 .dll),我在失去我应该做的。这是我当前的 makefile,它只为 2 个 .cpp 文件制作 .dylib。我不知道如何在没有硬编码的情况下对所有 .cpp 文件执行此操作。我的 makefile 应该是什么样子?

# Define a variable for classpath
CLASS_PATH = ../bin

# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)

all: libhpaprogram.dylib

# $@ matches the target, $< matches the first dependancy
libhpaprogram.dylib:
    cc -v -c -stdlib=libstdc++ -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ HPAProgram.cpp -o libhpaprogram.o
    cc -v -c -stdlib=libstdc++ -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ DCDTWrapper.cpp -o DCDTWrapper.o 
    libtool -dynamic -lSystem libhpaprogram.o DCDTWrapper.o -o libhpaprogram.dylib

HPAProgram.h : HPAProgram.class
    javah -classpath $(CLASS_PATH) $*

clean:
    rm HPAProgram.h libhpaprogram.o libhpaprogram.dylib

最佳答案

您的第一个选择是使用 make wildcard patterns

第二种选择是使用跨平台工具,如 CMake让它为你生成 Makefile。因此,您将从 [大部分] 血淋淋的细节中解脱出来,例如确切的编译器和链接器标志等。CMake 甚至支持生成 MS Visual Studio 项目:)

关于c++ - Makefile 编译当前目录和所有子目录中的所有 .cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21613888/

相关文章:

c++ - boost 1.66 安装错误

c# - Windows Mobile 平台上的 PInvoke

python - 我是否正确使用 ctypes 来 pythonify 这个结构?

linux - 我如何从其他目录调用make文件

linux - srlua makefile 错误 lua.h No such file or directory

c++ - 如何在派生类中声明复制构造函数,而基类中没有默认构造函数?

c++ - 没有qmake可以使用Qt Creator吗?

c++ - 为什么其中一个比另一个快得多?

Windows 权限,在不是管理员时获取 .dll 的句柄,不确定

c - 如何简化 makefile 中的模式规则?