Используя make-файлы плохо мне знакомо. Мои первые тесты с самым простым подходом работали очень хорошо до сих пор. Но теперь я застрял, пишущий make-файл, который создает исполняемый файл и общую библиотеку. Как я сказал, я плохо знаком с make-файлами. Вот мой простой подход:
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
Когда make-файл будет выполняться, только исполняемый файл будет скомпилирован. Даже возможно создать два объекта с одним make-файлом? Что лучший подход должен создать эти файлы?
По умолчанию make
создаст только первую цель в Make-файле, который является exe.a
в Вашем случае. Можно или сказать make
создать другую цель:
make lib.so
или обе цели:
make lib.so exe.a
или (предпочтенный) представляют новую первую цель, которую обычно называют 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
Теперь простое make
создаст (псевдо-) цель all
который в свою очередь зависит от exe.a
и lib.so
, таким образом, они создаются сначала. Обратите внимание, что Вам нельзя было называть файл all
в Вашем каталоге в этом случае, потому что затем make
запутывается.