2017-04-26 1 views
1

CMake 프로젝트에서 과 함께 gold 링커를 사용하려고합니다. 나는 단순히Clang ++과`-fuse-ld = gold`는 사용되지 않은 옵션 경고를 많이 낳습니다.

add_definitions(-fuse-ld=gold) 

를 할 경우 나는 형태로 경고의 톤을 얻을 :

clang: warning: argument unused during compilation: '-fuse-ld=gold' 
  • 이 옵션은 실제로 작동합니까?
  • 장소에 경고가 나타나지 않도록하려면 CMake 스크립트에 어디에서 추가해야합니까? 옵션으로

답변

3

은하지 컴파일러들 때문에, 링커 플래그에 추가, 링크 단계입니다. 예컨대, 당신은 변수 CMAKE_EXE_LINKER_FLAGS를 설정할 수 있습니다 :

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") 

주, CMake는 서로 다른 출력 유형에 대한 링커 관련 변수를 구분하는 것이다. 변수 CMAKE_EXE_LINKER_FLAGS실행 파일 (add_executable()) 연결에만 영향을줍니다. 모듈 초 동안 - (공동) 라이브러리

  • CMAKE_MODULE_LINKER_FLAGS에 대한 - STATIC 라이브러리
  • CMAKE_SHARED_LINKER_FLAGS에 대한 -

    • CMAKE_STATIC_LINKER_FLAGS : 라이브러리는 적절한 CMAKE_*_LINKER_FLAGS 변수를 사용하십시오.
  • +0

    컴파일러가 링커를 호출하지 않습니까? 링커를 * 선택 *하는 옵션이 있습니다. 링커는 전달되지 않습니다. 'clang ++ -fuse-ld = gold -Wl, --version'은'gold' 버전을 정확하게보고하고'clang ++ -Wl, -fuse-ld = gold -Wl, -version'은'ld'를보고합니다. 'clang ++ '는'gold'를 호출하지 않았다는 것을 의미합니다. – Svalorzen

    +0

    예, CMake (기본값)는 ** 링크 단계 **에서 컴파일러를 호출합니다. 그러나 * 링커는 컴파일 단계에서 관련이 없습니다 *. 그리고 여러분이 가지고있는 경고 메시지는 컴파일 링을 할 때 링커 옵션이 무시된다는 것을 의미합니다. '-Wl, --version'을 사용하여 버전을 요청하면 링커 * 버전이 생깁니다. 물론'-fuse-ld = gold'의 유무는 그 의미가 있습니다. – Tsyvarev

    관련 문제