使用一个 makefile 创建可执行和共享库

Olu*_*upo 4 shared-library compiling executable make

使用 makefile 对我来说是新的。到目前为止,我用最简单的方法进行的第一次测试效果很好。但是现在我被困在编写一个创建可执行文件和共享库的 makefile 中。正如我所说,我是 makefile 的新手。这是我的简单方法:

exe.a: main.c func.c
    gcc main.c func.c -o exe.a
lib.so: func.c
    gcc func.c -o lib.so -fPIC -shared
Run Code Online (Sandbox Code Playgroud)

执行 makefile 时,只会编译可执行文件。甚至可以用一个 makefile 创建两个对象吗?创建这些文件的最佳方法是什么?

Per*_*uck 5

默认情况下,make只会在您的情况下构建Makefile 中的第一个目标exe.a。您可以告诉make创建另一个目标:

make lib.so
Run Code Online (Sandbox Code Playgroud)

或两个目标:

make lib.so exe.a
Run Code Online (Sandbox Code Playgroud)

或(首选)引入一个新的第一个目标,通常命名为 all

all: exe.a lib.so

exe.a: main.c func.c
    gcc main.c func.c -o exe.a
lib.so: func.c
    gcc func.c -o lib.so -fPIC -shared
Run Code Online (Sandbox Code Playgroud)

现在一个简单的make将构建(伪)目标all,而后者又依赖于exe.alib.so,因此它们首先被构建。请注意,all在这种情况下,您不能在目录中调用文件,因为这样make会感到困惑。

  • 我完全明白你的意思:-) 我的技能也不是很好,当涉及到更复杂的 Makefile 时,我通常认为它们是 _rocket science_。 (2认同)