결론부터 말하자면 그런 방법 없다.


#include 와 #pragma comment(lib, file) 은 동작 방식에 차이가 있다.

#include는 강력한 경로 조합 기능을 갖추고 있으나 #pragma 는 현재 폴더를 기준으로 하는 상대경로 조합 밖에 되지 않는다.

왜 그렇게 만들었는지 누가 MS에 물어보고 답을 얻으면 내게도 공유해주길 바란다.



따라서 다음과 같은 경우

C:\MyProject\MyProject.sln 파일을 빌드한다고 하고

C:\MyLib\lib\FileManager.h
C:\MyLib\lib\FileManager.lib
 
가 있고 MyProject.sln 파일은 C:\MyLib 를 include 및 lib 폴더 경로에 지정했다고 한다면


#include "lib/FileManager.h"

#pragma comment(lib, "lib/FileManager.lib")

는 빌드되지 않는다. #include "lib/FileManager.h" 는 잘 되지만 #pragma 가 파일을 찾을 수 없다며 링크 에러가 난다.
(여담이지만 #pragma 는 역슬래시 경로를 먹이기 위해선 \\ 가 두 개 필요하여 귀찮으므로 보통 슬래시 경로를 많이 사용한다)

이유는 #include 의 경우 lib/FileManager.h 를 찾기 위해 우리가 미리 설정해둔 include 폴더 경로를 모두 조합하여

결국 C:\MyLib\lib/FileManager.h 를 조합하여 찾아내지만

#pragma 의 경우는 그런거 다 안 되므로 다음과 같은 결과가 되어

C:\MyProject\lib/FileManager.lib

당연히 없다고 나오게 된다. 물론 저 위치에 복사해 넣으면 잘 되지만 우리가 원하는건 그런 게 아니잖아?



그냥 오늘도 새벽녘에 코딩하다가 상기의 예와 비슷한 처리를 해둔 코드가 눈에 보여 포스팅해보았다.



아차, 해결책을 공유하지 않았는데 참 웃기는 일이지만 다음과 같이 lib 경로에 포함시키고 코드를 수정하면 잘 된다.

C:\MyLib\lib

#pragma comment(lib, "FileManager.lib")


그냥 MS가 이상하게 만들었다고 생각되지 않는가?


Posted by OOJJRS
,