У меня серьезные проблемы при попытке скомпилировать этот make-файл в среде AIX.
Структура папок выглядит следующим образом (с помощью команды, приведенной в одном из ответов здесь: Команда Linux для печати структуры каталогов в виде дерева find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
):
|-src
| |-main.c
|-obj
|-bin
|-Makefile
|-main.c
Я пытаюсь скомпилировать эту структуру, используя этот make-файл:
.SUFFIXES:
.DEFAULT:
CC = xlc_r
CFLAGSD = -g
CFLAGS = -Wall
CDEF =
LOADOPTS =
BIN_DIR = bin/
OBJ_DIR = obj/
SRC_DIR = src/
LIB_DIR = lib/
INC_DIR = include/
INC_BASE = -I./$(INC_DIR)
INC_SOURCE = -I./$(SRC_DIR)
INC_ALL = $(INC_BASE) $(INC_SOURCE)
# Libraries packed in macros
LIB_BASE = -L./$(LIB_DIR)
LIB_MATH = -lm
LIB_ALL = -lrt $(LIB_BASE)
# Libraries needed by the different programs and their respective names
LIB_PROGRAM_01 = $(LIB_ALL)
PROGRAM_NAME_01 = main
.PHONY: all
all: $(PROGRAM_NAME_01) \
execute \
$(OBJ_DIR)%.o: $(SRC_DIR)%.c
# --- Compiling $< ---
# $(CC) $(CFLAGSD) $(INC_ALL) -c $(SRC_DIR)$< -o $(OBJ_DIR)$@
create_directories:
if [ ! -d ./$(BIN_DIR) ]; then mkdir -p ./$(BIN_DIR);fi
if [ ! -d ./$(OBJ_DIR) ]; then mkdir -p ./$(OBJ_DIR);fi
execute: $(PROGRAM_NAME_01)
# --- Execute $< ---
# ./$(BIN_DIR)$<
$(PROGRAM_NAME_01): $(OBJ_DIR)main.o
# --- Linking $< ---
# $(CC) $(CDEF) $^ -o $(BIN_DIR)$@ $(INC_ALL) $(LIB_PROGRAM_01)
cleanobj:
# --- Clean all objects ---
# rm -f $(OBJ_DIR)*.o
clean:
# --- Clean all objects and the bin dir too ---
# rm -f $(OBJ_DIR)*.o $(BIN_DIR)*
allc: all \
cleanobj
Debug: all
Release: all
default: all
Я получаю следующую ошибку:
make: 1254-002 Cannot find a rule to create target obj/main.o from dependencies.
Но если я попытаюсь скомпилировать в Cygwin или Debian, это сработает.
Я пытался позвонить make -r -d
, чтобы увидеть все внутренние компоненты и символы отладки, но это никогда не относится к чему-либо близко удаленному к файлу src/main.c
.
С -d make-файл показывает следующее:
#
# Files that are only sources:
# src/%.c [src/%.c]
# obj/main.o [obj/main.o]
#*** Internal (default) Variables:
#*** Global Variables:
Версия make в aix: 1.1.1.3
с использованием команды grep bos /usr/ccs/lib/aix.mk