2012-02-03 3 views
4

필자는 인텔 컴파일러 icc (또는 icpc)를 CMake 기반 프로젝트 (Linux에서 가치있는 것을 위해)와 함께 사용하고자합니다. 예를 들어 cmake를 호출 할 때 CXX 변수를 내보낼 수 있습니다. like구성 옵션을 통해 CMake를 icc와 함께 사용하는 데 권장되는 방법은 무엇입니까?

CXX=icpc cmake ../ 

입니다. 나는 그러나 선택의 여지가 사용자 지정 옵션을 통해 사용할 수 있도록하고 싶습니다. 이를 위해 맞춤 옵션을 구문 분석합니다 (예 :

cmake -DMY_COMPILER_OPTION=Intel .. 

IF (MY_COMPILER_OPTION STREQUAL "Intel") 
    MESSAGE(STATUS "** Compiling with Intel settings **") 
    SET(CMAKE_CXX_COMPILER "icpc") 
    SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -w") 
    SET(CMAKE_CXX_FLAGS_DEBUG "-g") 
ENDIF() 

같은 일부 컴파일러 플래그와 함께 CMAKE_CXX_COMPILER을 설정합니다. 이것은 또한 작동하지만 중요한 "but"가 있습니다.

icc로 컴파일 할 때 -ipo (프로 시저 간 최적화) 옵션을 사용하고 싶습니다. 빌드 프로세스에서 정적 라이브러리를 컴파일해야합니다. 이 작업을 위해서는 Intel의 (그리고 아마도 xilink이라고 생각합니다)을 사용해야합니다.

cmake 실제로 그러나 이것은 단지에 컴파일러가 (사용 후 xiar) 환경 변수를 통해 설정 한 때 제대로 작동하는 것이

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1) 

위한 특별한 속성을 제공합니다. CMAKE_CXX_COMPILER을 통해 컴파일러를 설정할 때이 속성은 무시됩니다.

다른 방법이 있습니까? 추천 된 방법은? 또는 적어도 해결 방법이 있습니까?

답변

5

여기에 답변이 없으므로이 문제에 대한 도움을 받으려면 CMake mailing list 목록으로 이동했습니다. 전문가의 동의는 내가 이것을하려는 방식이 다소 나쁜 생각이라고 생각합니다. 그 이유는 내 사용자 지정 플래그의 구문 분석이 초기화 프로세스에서 늦게 발생하기 때문입니다. 따라서 환경 변수를 통해 컴파일러를 설정하고 CMake가 초기 구성 실행 중에 마술을하도록해야합니다. 내 접근 방식을 수정합니다 ..

+0

예, CMake는 불변으로 컴파일러를 치료하기 위해 좋아하는 (필요하지 않은 중 언어 제거) . – mabraham

0

의 편의를 위해 빠른 대답은, 소스 디렉토리에서 INTEL 빌드합니다

mkdir INTEL 
cd INTEL 
cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort ..