по Autotools:
Запустил я autoscan,
переименовал configure.scan на configure.in:
AC_PREREQ([2.69])
AC_INIT([Print()], [1.0], [E-MAIL-ADDRESS])
AM_INIT_AUTOMAKE
AC_PROG_CXX
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
Затем запустил aclocal
Запустил autoconf для генерации скрипта ./configure
Создал входной файл для automake:
touch Makefile.am
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = print
print_SOURCES = P1.cpp P2.cpp
Запустил automake:
automake –add-missing
Появился makefile.in, запустил скрипт ./configure
Создался мой makefile.
Из моих двух файлов собрался бинарник - все ок,
но у меня этот makefile внутри имеет огромное количество инструкций для 2 исходников. Почему так?
Если брать обычный makefile, который можно самому написать, то :
Меньше раз в 10.
# Pseudo targets
.PHONY : clean install uninstall
# Variables and flags
TARGET = CalcBit
CPP = g++
CPPFLAGS = -c -Wall
LDFLAGC =
OUTFLAGS = -o
# Path for src files
PREF_SRC = ./src/
PREF_OBJ = ./obj/
PREF_BIN = /usr/local/bin
# We get src files in src-dir
SRC = $(wildcard $(PREF_SRC)*.cpp)
# We get hpp files in src-dir
HPP = $(wildcard $(PREF_SRC)*.hpp)
# We get obj files before compile
OBJ = $(patsubst $(PREF_SRC)%.cpp, $(PREF_OBJ)%.o, $(SRC))
# We get executable file
$(TARGET) : $(OBJ)
$(CPP) $(LDFLAGS) $(OBJ) $(OUTFLAGS) $(TARGET)
# We compile src.cpp
$(PREF_OBJ)%.o : $(PREF_SRC)%.cpp $(HPP)
$(CPP) $(CPPFLAGS) $< $(OUTFLAGS) $@
# Intall calculator in System
install:
sudo install $(TARGET) $(PREF_BIN)
# Uninstall calculator from System
uninstall:
sudo rm -rf $(PREF_BIN)/$(TARGET)
# Remove all object files and Executable
clean:
rm -rf $(OBJ) $(TARGET)
Ну и еще вопрос, как в конфиге configure.in описать, чтобы все лежало по папочкам , а не в одной директории, пробовал так:
AC_CONFIG_FILES([/src/Makefile]) - ошибка.
И как добавить еще цели , например, я хочу чтобы в makefile после генерации появилась цель test, которая будет запускать что-то,
Ну, на то оно и автогенерируемое. Но вообще, советую не трогать autotools, лучше смотреть в сторону CMake.
Обсуждают сегодня