다음 명령줄을 살펴보세요.
gcc -o hello -Wall -D_BSD_SOURCE hello-world.c
이제 "hello" 실행 파일에 대해 일부 처리를 수행하여 이러한 옵션을 이해할 수 있는 방법이 있습니까?
답변1
안타깝게도 그렇지 않습니다. 하지만 바이너리를 만들기 전에 생각해 보면 몇 가지 방법이 있습니다. 여기 또 하나가 있습니다. 최근 gcc에서는 찾고 있는 설명이 포함된 ELF 파일에 섹션을 추가하는 -frecord-gcc-switches 옵션을 사용할 수 있습니다.
$ gcc -frecord-gcc-switches -o hello -Wall -D_BSD_SOURCE hello-world.c
$ readelf -p .GCC.command.line hello
String dump of section '.GCC.command.line':
[ 0] -D _BSD_SOURCE
[ f] hello-world.c
[ 1d] -mtune=generic
[ 2c] -march=x86-64
[ 3a] -Wall
[ 40] -frecord-gcc-switches
보시다시피 명시적으로 제공한 옵션뿐만 아니라 사용된 모든 옵션이 표시됩니다.
답변2
불가능하지만 바이너리를 제거하지 않으면 컴파일러 버전을 사용할 수 있습니다.
매크로 관련 내용을 언급하면 #ifdef HAVE_XXX
C/C++ 소스 파일에 문서화되어 있습니다. GNU 툴체인을 살펴보세요 autogen
.
답변3
방법은 없지만 Makefile을 사용하는 경우 다른 방법이 있습니다.
TARGET=hello
CFLAGS=-Wall -D_BSD_SOURCE hello-world.c
all:
cc -o $(TARGET) $(CFLAGS) -DCFLAGS="\"$(CFLAGS)\""