2013-06-27 3 views
3

나는 사용하고자하는 c 함수가 있지만 gnuC 컴파일러 대신 Intel 컴파일러로 컴파일되었습니다. 나는 프로그램을 만들기 위해 cmake을 사용하고있다. (나는 실제로 ROS을 사용하고 있으므로 rosmake이지만베이스는 cmake이므로 ROS 문제보다 더 많은 cmake 문제가 있다고 생각합니다.) icc으로 빌드 된 파일이 x.c이고 x.s 파일을 생성한다고 가정하십시오. 내 파일 y.cpp에서 x.ca() 함수를 사용하고 싶습니다. y.cpp에서 내가 가진 : CMakeLists.txtCMake와 .s 파일 연결하기

rosbuild_add_executable(y y.cpp x.c) 

rosbuild_add_executable is analogous to add_executable(...) 

이있는 경우 작동하지만 내가 iccx.c을 구축하려고하면 대신 x.s 파일을 포함하도록

#include "x.h" 
..... 
call a() 

가 :

rosbuild_add_executable(y y.cpp x.s) 

그것은 나던 작업. 내가 전화하는 방식에 어떤 변화가 있습니까 a()y.cpp에 있습니까? 또는 그것을 연결하는 다른 방법이 있습니다.

답변

6

. CMake는 당신의 .S 파일 각각에 대해

set_property(SOURCE <myfile>.S PROPERTY LANGUAGE C) 

를 사용하여 그렇게 말 할 수 있습니다.

+0

일반적으로 S 파일을 gcc와 연관시키는 방법을 알고 있는가? ? makefile과 마찬가지로 .S.o : \t $ (CROSS_COMPILER) gcc $ (CFLAGS) -c $ <-o $ @ – Slava

3

.s 파일을 사용하려면 CMake에서 어셈블리 언어 지원을 enable_language으로 설정해야합니다.

여기에서 자세한 정보를 찾을 수 있습니다 : GCC를 사용하는 경우, 당신은 당신의 C 컴파일러 .S 파일 (필요 ASM의 명시적인 호출)를 컴파일 할 수 있습니다 http://www.cmake.org/Wiki/CMake/Assembler

+0

감사합니다. @Guillaume. 그로부터 나는 해당 어셈블러 언어를 활성화 한 다음 실행 파일에서 파일을 간단히 링크해야한다고 생각했습니다. 그러나 나는 정말로 내가 여기에서 무엇인가 놓치고 있다고 확신하고있다. .cpp 파일에서해야 할 일이 있습니까? – canatan

+0

@canatan 언어를 활성화하고'add_executable' 호출에'.s' 파일을 추가하면 충분합니다. 내가 확신 할 수없는 유일한 점은 CMake가 인텔 어셈블리 언어/컴파일러를 지원하는지 여부는 문서의 두 언어가 ASM-ATT와 ASM_MASM이기 때문입니다. – Guillaume

+0

동료가 .s 파일을보고 ASM-ATT라고 말했습니다. 간단한 연결을 할 때 다음과 같은 오류가 나타납니다. ROSY >/usr/bin/as에 고유하다고 가정합니다. 인식 할 수없는 옵션 '-> OS_PACKAGE_NAME = "landshark_dwaICCIntegration"' – canatan