Есть небольшая библиотека с интерфейсами на C и C++, сборка осуществляется с использованием Makefile.
Код: Выделить всё
TARGET := $(notdir $(CURDIR))
C_SRC_FILES := $(wildcard $(SRC_DIR)/$(TARGET)_*.c)
CPP_SRC_FILES := $(wildcard $(SRC_DIR)/$(TARGET)_*.cpp)
C_OBJ_FILES := $(notdir $(C_SRC_FILES:%.c=%.o))
CPP_OBJ_FILES := $(notdir $(CPP_SRC_FILES:%.cpp=%.o))
library: prep_lib
$(CC) $(CFLAGS) -Iprivate -std=c99 -fPIC -c $(C_SRC_FILES)
$(CC) -shared -Wl,-R$(LIB_TARGET),-soname,$(TARGET).so.$(LIB_VER) \
-o $(LIB_DIR)/$(TARGET).so.$(LIB_VER) $(C_OBJ_FILES)
[ -L $(LIB_DIR)/$(TARGET).so ] || \
ln -s $(TARGET).so.$(LIB_VER) $(LIB_DIR)/$(TARGET).so
$(AR) crs $(LIB_DIR)/$(TARGET).a $(C_OBJ_FILES)
$(CXX) $(CFLAGS) -Iprivate -fPIC -c $(CPP_SRC_FILES)
$(CXX) -shared -Wl,-R$(LIB_TARGET),-soname,$(TARGET)++.so.$(LIB_VER) \
-o $(LIB_DIR)/$(TARGET)++.so.$(LIB_VER) $(CPP_OBJ_FILES)
[ -L $(LIB_DIR)/$(TARGET)++.so ] || \
ln -s $(TARGET)++.so.$(LIB_VER) $(LIB_DIR)/$(TARGET)++.so
$(AR) crs $(LIB_DIR)/$(TARGET)++.a $(CPP_OBJ_FILES)
$(STRIP) --strip-all $(LIB_DIR)/*.so
Сейчас пробую, в основном в образовательных целях, добавить сборку средствами libtool, тестовый Makefile.am:
Код: Выделить всё
TARGET = $(notdir $(CURDIR))
AM_CFLAGS = -Wall -Wextra -Werror -pedantic -Iinc
AM_CFLAGS += -std=c99
lib_LTLIBRARIES = $(TARGET).la
lib_c_SOURCES = $(wildcard $(SRC_DIR)/$(TARGET)_*.c)
lib_cpp_SOURCES = $(wildcard $(SRC_DIR)/$(TARGET)_*.cpp)
lib_CPPFLAGS = $(AM_CFLAGS)
При вызове automake вижу сообщения о ошибках:
Код: Выделить всё
Makefile.am:1: notdir $(CURDIR: non-POSIX variable name
Makefile.am:1: (probably a GNU make extension)
Makefile.am:17: wildcard $(SRC_DIR: non-POSIX variable name
Makefile.am:17: (probably a GNU make extension)
Makefile.am:18: wildcard $(SRC_DIR: non-POSIX variable name
Makefile.am:18: (probably a GNU make extension)
Makefile.am:16: `$(TARGET).la' is not a standard libtool library name
Makefile.am:16: did you mean `lib$(TARGET).la'?
Makefile.am:18: variable `lib_cpp_SOURCES' is defined but no program or
Makefile.am:18: library has `lib_cpp' as canonical name (possible typo)
Makefile.am:17: variable `lib_c_SOURCES' is defined but no program or
Makefile.am:17: library has `lib_c' as canonical name (possible typo)
Собственно вопрос - как в файле Makefile.am можно добавить исходные файлы по маске?
Для примера посмотрел в libxml2, но там исходники просто перечислены. Используемые пакеты - libtool 2.2.6b-2, automake 1:1.11.1-1, autoconf 2.67-2.
Спасибо.