반응형

프로그램 247

make 관련 자주 찾아보는 기능 정리

$@ : 목표 이름 $* : 목표 이름에서 확장자가 없는 이름 $ 오프젝트 파일이 없는 c 파일을 o 파일로 컴파일. abc : abc1.o abc2.o gcc $^ -o @a # abc1.o abc2.o 으로 abc 를 빌드해라. $(wildcard 패턴 ) > 말그대로. 와일드카드 사용 가능. 실제 와일드카드( ? * ) 와 다른 점은 출력값을 문자열로 구성해 준다는 것에 있다. 즉, 리턴값이 와일드카드의 실제 결과값이라는 것. 예를 들어 aaa.c bbb.c ccc.c 가 있을 때 *.c 나 $(wildcard *.c ) 둘 다 "모든 c 파일" 을 사용하지만 1. *.c 는 문자열 리턴값이 동일하다. -@echo "*.c" *.c 2. $(wildcard *.c) 는 패턴에 해당하는 문자열을 배열..

프로그램 2022.02.14

missing binary operator before token (

두줄요약 : #define , #include 쪽 봐라. 그쪽 선언부나 매크로, 선언 순서 쪽 문제 가능성 있다. 확인해 볼 건 1. #ifdef , #ifndef 값 순서가 맞는지. 종료 쌍 ( #endif ) 가 맞는지. 2. 매크로가 규약에 맞는지. 혹은 특정 플랫폼이나 컴파일러, 아키텍쳐에서만 사용가능한건 아닌지. 3. 선언값이나 매크로 변경때 인자값이나 괄호 쌓는거나 줄바꿈이 제대로 처리된건지. https://stackoverflow.com/questions/21338385/what-does-the-compiler-error-missing-binary-operator-before-token-mean This is not a compiler error, it is a preprocessor err..

프로그램 2022.02.10

정적 링크로 컴파일하면, 전체 용량이 줄어든다?

어... 웃지말자. 실제로 주장한 사람이 있다. 예를 들어 main.c 1k libfoo.a 10k libfoo.a 는 3개의 함수로 구성. libfoo.a:foo1() 2k libfoo.a:foo2() 3k libfoo.a:foo3() 5k 가 있다고 가정하자. 위의 1K 2K 3K 5K 10K 는 실행 바이너리 혹은 라이브러리 크기라고 보면 된다. 자. main 함수에서 foo1 만 사용한다면, 이걸 static 으로 컴파일 할 때, 실행파일의 총 크기는 11K ( = main.c 1K + libfoo.a 10K ) 가 아니라, 3k 가 된다는 주장이다. 그러니까 이 사람 논리는, static 으로 빌드를 하면 링커가 링크할 때 전체 라이브러리 파일을 실행파일과 합치는 게 아니라, 필요한 함수 부분의..

프로그램 2022.02.04
반응형