제가 이것을 잘못된 스택에 게시했다면 용서해 주십시오. Makefile이 없는 디렉토리의 파일에 대해 make를 실행할 때마다 make는 여전히 작동하고 소스 코드를 컴파일하지만 인수만 사용하면 됩니다.gcc filename.c -o filename
예를 들어, make test
디렉토리에 test.c를 입력하면 다음과 같이 됩니다.gcc test.c -o test
Makefile 없이 make를 실행할 때마다 다음을 수행하도록 이것을 변경하고 싶습니다.gcc -ggdb -std=c99 -Wall -Werror -o filename filename.c -lcs50 -lm
또한 이 변경 사항은 영구적이며 재부팅하거나 디렉터리를 변경해도 변경되지 않을 것이라고 생각했습니다.
저는 현재 AMD 64비트 프로세서에서 Crunchbang Weezy를 실행하고 있습니다.
답변1
CFLAGS
환경 변수가 필요합니다 .
예를 들어:
$ export CFLAGS='-ggdb3'
$ make test
cc -ggdb3 test.c -o test
답변2
일반적으로 입력할 때 make test
명령이 누락되면 Makefile
도구 make
는 일반 컴파일 명령을 사용하려고 시도합니다.
예
다음과 같은 내용이 있다고 가정해 보겠습니다 test.c
.
$ cat test.c
#include <stdio.h>
int main()
{
printf( "I am alive! Beware.\n" );
return 0;
}
그렇지 않은 경우 Makefile
실행하면 make test
다음과 같은 동작이 발생합니다.
$ make test
cc test.c -o test
노트:후속 실행 결과는 다음과 같습니다.
$ make test
make: `test' is up to date.
테스트 실행:
$ ./test
I am alive! Beware.
make test를 입력하고 있다면 자리가 있어야 합니다 Makefile
. 내가 가지고 있지 않은 디렉터리에서 명령을 실행하면 Makefile
다음과 같은 결과가 나타납니다.
$ make test
make: *** No rule to make target `test'. Stop.
CFLAGS 사용
make
기본 명령줄 옵션을 재정의하려면 다음을 수행할 수 있습니다.
$ export CFLAGS="-ggdb -std=c99 -Wall -Werror -lcs50 -lm"
이제 다음을 실행하면 make
:
$ make test
cc -ggdb -std=c99 -Wall -Werror -lcs50 -lm test.c -o test
인용하다
답변3
[편집하다]
GNU make 매뉴얼 페이지에서:
-f 옵션이 없으면 make는 makefile GNUmakefile, makefile, Makefile을 순서대로 찾습니다.
CFLAGS
매개변수는 Makefile에 변수를 정의한 경우에만 전달될 수 있습니다.
CC=gcc
CFLAGS=-g -O -Wall -Werror
all: foo
foo: foo.o
$(CC) $(CFLAGS) $<
여기에서 다음을 사용하여 변수를 재정의할 수 있습니다.
$ make CFLAGS="-ggdb -std=c99 -Wall -Werror"
gcc -ggdb -std=c99 -Wall -Werror -c -o foo.o foo.c
gcc -ggdb -std=c99 -Wall -Werror foo.o
그러나 Makefile을 편집하는 것이 더 쉽습니다.
답변4
make(1)
이는 귀하가 가지고 있는 정확한 정보와 사용하는 makefile 에 따라 다릅니다 .
예를 들어, GNU make는 유용한 기본 규칙 및 매크로 세트를 가정합니다. 즉, 매크로 CC는 C 컴파일러의 이름을 제공하고 CXX는 C++ 컴파일러의 이름을 제공하며 CFLAGS는 CC의 플래그이고 CXXFLAGS는 CXX의 플래그입니다.
foo.o
또한 do를 호출하여 생성되고 실행 파일을 생성하는 일련의 기본 규칙을 정의합니다 . 마찬가지로, make의 다른 버전에서는 다른 기본 매크로와 규칙을 정의할 수 있습니다(그러나 CC와 CFLAGS는 보편적인 것으로 보입니다).foo.c
$(CC) $(CFLAGS) -c foo.c
foo
foo.o
$(CC) $(CFLAGS) -o foo foo.o
만약 있다면아니요tst
makefile, GNU make 위의 규칙을 사용하면 다음을 통해 매크로를 재정의할 수 있습니다 tst.c
.
make CC=clang CFLAGS='-O2 -g -Wall' tst
갑자기 다른 make가 어떻게 반응하는지 모르겠고, 다른 make는 makefile 없이 오류가 발생했던 것으로 기억하는 것 같습니다.
makefile(여러 가지 다른 이름을 가질 수 있음)이 있는 경우 설명서를 확인하십시오. 최소한 makefile
해당 makefile Makefile
이 정의하는 매크로 정의 및 규칙이 적용됩니다.최대makefile이 존재하지 않으므로 위의 명령을 사용하시면 됩니다. 그러나 보장은 없습니다. 일반적으로 INSTALL, README 또는 일부 변형이라는 이름의 파일이나 makefile 자체에서 지침을 확인하세요.
마지막으로 사용 가능한 몇 가지 대안이 있지만(기본 제어 파일을 주로 부르는 변형 makefile
) make(1)
거의 보편적이므로 해당 사용에 대해 어딘가에 문서화해야 합니다.