2013-07-25 1 views
3

내 응용 프로그램에는 ws2_32.lib를 포함하고 싶지만 프로젝트 등록 정보에는 -l의 CMake를 지정하십시오.CMake에 Windows 라이브러리를 추가하는 방법?

... 
add_executable(Executive ${exec_src}) 
target_link_libraries(Executive ws2_32) 

은 그래서 내 CMakeLists.txt 파일의 모습입니다,하지만 난 "입력"에서 VS2010 링커 속성 페이지를 확인하면 그것은 -lws2_32.lib을 나열합니다. -l이 왜 추가됩니까? 그리고 내가 그것을 수동으로 변경하면 ws2_32.lib을 읽음으로써 프로젝트가 올바르게 링크 될 수 있기 때문에 어떻게 제거 할 수 있습니까?

나는 다음을 시도했다 : find_library(WIN_C ws2_32) 그러나 결과는 NOTFOUND이었다.

+0

어떤 생성기를 사용하고 있습니까? 'Visual Studio'? – arrowd

답변

1

Visual Studio 2010 생성기와 CMake 2.8.11.2를 사용하여 같은 문제가 발생했습니다. 제 경우에는 wininet.lib와 연결하려고했습니다. 나는 그것이 CMake의 버그라고 가정하고, 해결 방법을 찾기 위해 오랜 시간을 보냈다. 궁극적으로 나는 다음 작품이 발견 :

find_library 명령을 사용하여 .lib 파일의 절대 경로를 찾아 그것을 변수에 할당하십시오. 그런 다음 target_link_libraries 명령에서 해당 변수를 사용하십시오. 귀하의 경우에는 다음과 같이 표시됩니다.

find_library(ws2_32_LIBRARY_PATH ws2_32) 
add_executable(Executive ${exec_src}) 
target_link_libraries(Executive ${ws2_32_LIBRARY_PATH}) 

누군가가 시간을 절약 할 수 있기를 바랍니다.

2

내 이전 대답부터, 나는 더 나은 접근 방법을 찾았습니다. 정확하게 전달하는 방법을 밖으로 작동되지 않도록하고 - 당신의 CMAKE 출력의 시작에서

당신은, 그것은 CMake 올바르게 컴파일러를 결정하지 않는 것 같습니다 그렇다면이

The C compiler identification is unknown 
The CXX compiler identification is unknown 

을? : 같은 것을보고있다 링커 인수.

필자가 설치 한 도구 모음이 혼동을 일으킨 것처럼 생각됩니다. Visual Studio 셸을 설치하는 VS2010 익스프레스 도구와 TFS 팀 탐색기의 다양한 버전이 있습니다. CMake가 devenv.exe의 존재를보고 있었고 따라서 전체 Visual Studio가 있다고 가정합니다.

CMAKE_MAKE_PROGRAM 변수를 -D CMAKE_MAKE_PROGRAM 명령 줄에서 지정하거나 GUI에서 고급 tickbox를 선택하고 항목을 찾아서 수정할 수 있습니다. C : /PROGRA~2/MICROS~1.0/Common7/IDE/devenv.com에서 C : /PROGRA~2/MICROS~1.0/Common7/IDE/VCExpress.exe로 변경해야했습니다. 슬래시에주의하십시오!

일단 내가 한 번 해보니 find_library 것을 더 이상 할 필요가 없었습니다.

관련 문제