제목은 bits/stdc++.h랑 atcoder library라고 적었지만 각각 g++, clang++, MSVC에 임의의 헤더 파일을 추가하고 싶을 때도 똑같이 사용할 수 있다.
기본적으로 컴파일러가 소스코드를 컴파일해주는데 우리가 뭐 아무것도 추가 안해놔도 vector나 stdio 같은 헤더는 존재한다. 그런 헤더들은 보통 컴파일러를 설치할 때 같이 딸려온다. Mac은 Clang이 일반적이고 리눅스 계열은 gcc가 일반적이고 윈도우는 Visual Studio를 설치할 때 딸려온다고 생각하면 된다.
이렇게 딸려오는 것들의 위치는 설치되면서 혹은 환경변수로 등록되어 있다. 이런 경로들을 알고 있다면 원하는 파일을 해당 경로에 갖다 놓으면 찾아줄거다. 내가 경험했을 땐 다 됐다.
Ubuntu
bits/stdc++은 사실 비표준헤더로 gcc에만 기본으로 딸려 있다. 그래서 리눅스 계열인 ubuntu는 따로 건드릴 게 없다. 이제 atcoder library를 추가해야 한다.
두 가지 방법이 존재하는데 위에서 말한대로 컴파일러가 헤더의 위치를 찾는 곳에다가 이 레포지토리의 atcoder 폴더를 놓는 게 첫번째 방법이다.
이제 g++이 헤더를 찾는 경로가 어딘지를 알아야 한다.
g++ -E -x c++ - -v < /dev/null
를 실행하면 #include <...> search starts here: 로 시작하며 여러 경로가 나온다. 출처
그리고 그 위에 ignoring nonexistent directory ... 라고 나와있는 것은 위의 경로에서도 찾게 되어 있는데 그런 경로가 없다고 나타내주는 것이다. 그러면 이제 여기다가 atcoder 폴더를 갖다 놓으면 된다. 그리고 #include<atcoder/all>
같이 include가 문제없이 될 것이다.
그런데 만약 sudo 권한이 없다면 위에 나온 디렉토리에 쓰기 권한이 없을 확률이 높다. 그러면 이제 쓰기 권한이 있는 곳에 임의의 경로를 만들고 여기에서 헤더를 찾으라고 컴파일러한테 알려줘야 한다.
일단 g++의 include 경로는 환경변수로 관리가 가능하다. CPLUS_INCLUDE_PATH
가 이를 관리해주는 환경변수이기 때문에 이에 추가해주면 된다.
아마 export는 sudo 권한이 없어도 됐던 거로 기억하는데 맞는지 정확히 모르겠다. 위의 스크린샷을 살펴보면 /home/seastar105/ac-library라는 경로를 볼 수 있는데 .bashrc
에 아래와 같은 한 줄을 추가해서 include 경로를 추가했기 때문에 나오는 것이다.
export CPLUS_INCLUDE_PATH="$HOME/ac-library:$CPLUS_INCLUDE_PATH"
Mac
Ubuntu와 다를 것이 없다. 다만 g++이 clang++로 바뀌는 것뿐이다. 다만 bits/stdc++.h는 없기 때문에 clang++ -E -x c++ - -v < /dev/null
을 실행해서 나온 곳에 bits 폴더를 만들고 stdc++.h를 직접 만들어주면 된다. stdc++.h의 내용은 여기나 구글에 검색하면 많이 나오기 때문에 넣어주면 잘 될 것이다.
다만 atcoder library는 C++17 이후에서만 컴파일이 되니까 주의하도록 하자. 매번 -std=c++17 치기도 귀찮아서 나는 그냥 alias g++="g++ -std=c++17"
을 걸어놨다.
맥에서도 CPLUS_INCLUDE_PATH
방식이 잘 동작되는거 같다. 방금 해봤는데 인식이 잘 된다.
Visual Studio
Visual Studio의 경우 아마 include 용 경로를 추가하는 것도 가능한 것으로 아는데 정확한 방법이 기억나질 않아서 그냥 이건 기존 include 경로에 추가하는 것만 소개하겠다.
C:/ProgramFiles
로 가보면 Visual Studio 폴더로 가서 버전별로 폴더가 있을텐데 그냥 쭉쭉 타고 들어가다 보면 VC라는 폴더가 있을 것이다. 거기에 들어가면 include 폴더가 존재하고 atcoder library와 bits/stdc++.h를 추가해주면 된다.
VS도 atcoder library 사용시에 조심해야 할 것이 하나 있는데 32비트로 컴파일하면 빌드가 안된다. x64로 잘 바꾸고 빌드하도록 하자.
Visual Studio 2019에서 추가한 곳 캡처
'TIL' 카테고리의 다른 글
Just-In-Time 컴파일 방식 (1) | 2021.05.28 |
---|---|
C++ override 키워드 (0) | 2021.05.26 |
Google Speech-to-Text API Response를 JSON으로 저장하는 방법 (0) | 2021.04.27 |
파이썬 json 유니코드 잘 출력하기(한글로 나오게 하기, u 지우기) (0) | 2021.03.12 |
현재 작업을 다른 브랜치에 커밋하고 싶을 때 (0) | 2021.03.05 |