Makefile не обнаруживает файлы внутри папок - PullRequest
0 голосов
/ 22 января 2019

У меня серьезные проблемы при попытке скомпилировать этот 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

1 Ответ

0 голосов
/ 22 января 2019

Ваш make-файл является make-файлом GNU Make, но ваша программа AIX make не является GNU Make и не поймет многие make-файлы GNU Make . Ваша make программа на Cygwin или Debian - это GNU Make. Установка и использование GNU Make .

...