2013-03-02 6 views
1

플러그인을 사용하기 위해 program을 변환하려고하는데 Makefile에 문제가 있습니다. Makefile이 디렉토리 플러그인을보고, 두 개의 다른 확장자 인 .so와 .o를 사용하여 거기에있는 모든 .c 파일을 컴파일하고, 별도의 폴더에 설치하는 것이 바람직합니다. 기본적으로 다음과 같습니다.여러 .c 파일에서 여러 .so 및 .o 파일 생성

gcc -shared -lc -o testPugin.so testPugin.o 
gcc -c -fpic testPugin.c 
gcc Cprogram.c -ldl 

그러나 불명확 한 .c 파일의 경우.

지금까지 플러그인 디렉토리를 살펴본 결과 모든 파일을 찾을 수 있었지만 위의 두 번째 단계에 따라 파일을 컴파일하고 .so 및 .o 파일을 출력합니다. 여기에 지금까지 무엇을 가지고 :

TOP := $(dir $(lastword $(CURDIR))) 
PLUGDIR = $(TOP)src/plugins 
PLUGSRC = $(PLUGDIR)/*.c 
OBJ = $(PLUGSRC:.c=.o) 
SRCS = Cprogram.c 
CFLAGS = -shared -lc 
BINARY = testProg 

$(BINARY): $(SRCS) 
    echo $(OBJ) 

하지만 그건 단지 출력 :

⇒ make 
echo /Users/fragmachine/eclipse-workspace/Cprogram/src/plugins/*.o 
/Users/fragmachine/eclipse-workspace/Cprogram/src/plugins/*.o 

내가 얻을 OBJ = $(PLUGSRC:.c=.o)OBJ = $(SRCS:.c=.o)에 변경하는 경우 :

⇒ make 
echo Cprogram.o 
Cprogram.o 

내가 원하는 종류의 어느 하지만 하나의 파일에만 해당됩니다. 나는 일종의 와일드 카드 문자가 빠져 있어야만한다고 생각하지만 행운과 함께 %와 *를 사용해 보았습니다.

$(BINARY): $(SRCS) 
    gcc -shared -lc $(All plugin.c files) -o $(OBJ) #Output .o files for each plugin.c file 
    gcc -shared -lc $(All plugin.c files) -o $(OBJ2) #Output .so files for each plugin.c file 
    gcc -c -fpic $(All plugin.c files) # I'm not 100% sure what this does 
    gcc Cprogram.c -ldl # Compile the main program 

나는 전혀 make에 많은 경험이없는 : 내가 뭘하려는거야 분명하지 않다 경우

는 여기에 몇 가지 이상한 메이크업 의사 코드입니다. 전에는 정말 간단한 것들만 만들었습니다. 그래서 어떤 도움이 크게 감사 할 것입니다.

PLUGDIR = src/plugins 
PLUGSRC = $(PLUGDIR)/*.c 
SRCS = $(wildcard $(PLUGSRC)) 
OBJ = $(SRCS:.c=.o) 
SOBJ = $(SRCS:.c=.so) 
CFLAGS = -shared -lc 
BINARY = testProg 

all: $(BINARY) 
    @echo "make is fun!" 

$(BINARY): $(OBJ) $(SOBJ) 
    @echo "build the binary [email protected] which depends on $^" 

%.o: $(SRCS) 
    @echo [email protected] 

%.so: $(SRCS) 
    @echo [email protected] 

먼저, 이것은 SRC/플러그인 디렉토리에있는 모든 * .c 인 이름을 수집하기 위해 $ (와일드 카드) 함수를 사용하여 여기에

답변

1

당신이 시작할 수있는 무언가이다.

두 번째는 모든 .o 파일과 .so 파일에 의존하는 target all을 사용합니다.

세 번째 .c 파일에서 .so 및 .o 파일을 빌드하는 두 가지 패턴 규칙이 있습니다.

네 번째 소스 경로는 $ (TOP) src/plugins를 사용했지만 올바른 상대 경로가 아니기 위해 $ (TOP)에 빌드 중입니다 ... 단지 src/plugins 만 필요합니다.

그래서 당신은이 출력 (SRC/플러그인라는 파일/Cprogram.c가 가정)되어 있는지 확인 실행하면이에서 희망

$ make 
src/plugins/Cprogram.o 
src/plugins/Cprogram.so 
build the binary testProg which depends on src/plugins/Cprogram.o src/plugins/Cprogram.so 
make is fun! 

당신이 나머지를 알아낼 수 있어야가. 더 내 프로젝트 템플릿을 참조하십시오

는 : 는 https://github.com/cdesjardins/makefiles

나는 새로운 프로젝트를 시작하고 때마다 나는 출발점으로 그 REPO를 사용합니다.

+0

고맙습니다. 나는 하루 종일 놀고 있었고 성공을 거두지 못했습니다. 나는 적어도 뭔가를 만들 수 있도록 bash 스크립트를 작성하기 시작했다 ... 나는 여기서 그것을 알아낼 수 있어야한다. 다시 한번 감사드립니다 :) – facetoe

관련 문제