makefile에서 -I와 -L의 차이점은 무엇입니까?
makefile에서 -I 및 -L 플래그의 사용법은 무엇입니까?
이들은 일반적으로 링커 명령 줄의 일부이며 대상 작업에서 직접 제공되거나 make
링크 명령을 형성하도록 확장 되는 변수에 더 일반적으로 할당됩니다 . 이 경우 :
-L
라이브러리가 포함 된 디렉토리의 경로입니다. 라이브러리의 검색 경로입니다.
-l
링크하려는 라이브러리의 이름입니다.
예를 들어 라이브러리에 연결 ~/libs/libabc.a
하려면 다음을 추가합니다.
-L$(HOME)/libs -labc
연결에 대한 기본 암시 적 규칙을 활용하려면 다음 LDFLAGS
과 같이 변수에 이러한 플래그를 추가합니다 .
LDFLAGS+=-L$(HOME)/libs -labc
그것은 분리하는 것은 좋은 습관입니다 LDFLAGS
및 LIBS
예를 들어,
# LDFLAGS contains flags passed to the compiler for use during linking
LDFLAGS = -Wl,--hash-style=both
# LIBS contains libraries to link with
LIBS = -L$(HOME)/libs -labc
program: a.o b.o c.o
$(CC) $(LDFLAGS) $^ $(LIBS) -o $@
# or if you really want to call ld directly,
# $(LD) $(LDFLAGS:-Wl,%=%) $^ $(LIBS) -o $@
그것은 다른 일을 할 수있다하더라도, -l...
지시어를 이동 해야하는 후에 그 문자를 참조하는 객체. -Wl,--as-needed
링크가 잘못된 순서로 수행되면 일부 최적화 ( 가장 명백한 것임)가 실패합니다.
실제로 메이크 파일을 작성하려면 프로젝트 도구 체인의 모든 구성 요소에 대한 명령 줄을 잘 이해해야합니다. 옵션 좋아 -I
하고 -L
메이크업 자체가 이해되지 않습니다. 오히려 make는 도구를 실행하여 전제 조건 파일을 대상 파일로 변환하는 명령 줄을 만들려고합니다.
종종 이것은 C 또는 C ++ 소스 파일이 오브젝트 파일로 컴파일되고 결국 실행 파일을 얻기 위해 링크됩니다.
이 경우 컴파일러 설명서, 특히 이해하는 명령 줄 옵션과 관련된 부분을 참조해야합니다.
일반적인 용어로 말하면 이러한 특정 옵션은 컴파일러와 링커 사이에서 꽤 표준입니다. -I
한 #include
줄에 이름이 지정된 파일에 대해 컴파일러 -L
가 검색 한 위치 목록에 디렉토리를 추가하고 -l
옵션으로 이름이 지정된 라이브러리에 대해 링커가 검색 한 위치 목록에 디렉토리를 추가합니다 .
결론은 (일반적으로하는 것으로 알려져으로 메이크의 "언어", 쉘을 메이크 파일 자체의 문법의 조합이다 /bin/sh
또는 뭔가 비슷한), 일반 쉘 명령 (예 rm
, cp
, install
, 등) 컴파일러 및 링커에 특정한 명령 (예 : gcc -v --help
쉘 프롬프트에 입력 하면 gcc가 하나의 시작점으로 이해하는 옵션의 거의 완전한 (그리고 매우 긴) 목록을 제공합니다).
한 가지 주목할 점은 이것이 컴파일러 / 링커에 전달되는 옵션이라는 것입니다. 따라서 그들의 역할을 알기 위해 컴파일러 man 페이지 / 문서를보고 있어야합니다.
참조 URL : https://stackoverflow.com/questions/519342/what-is-the-difference-between-i-and-l-in-makefile
'programing' 카테고리의 다른 글
ipdb를 사용하여 하나의 셀 (jupyter 또는 Ipython)에서 Python 코드 디버그 (0) | 2021.01.18 |
---|---|
Python 스크립트 "예상 된 2D 배열, 대신 1D 배열이 있습니다."오류가 발생합니까? (0) | 2021.01.18 |
감사와 로깅의 차이점은 무엇입니까? (0) | 2021.01.18 |
반복 가능한 객체 및 배열 유형 힌트? (0) | 2021.01.18 |
C # 구조체 new StructType () 대 default (StructType) (0) | 2021.01.18 |