2013-06-27 65 views
3

我有一個c函數,我想使用,但編譯Intel編譯器,而不是gnuC編譯器。我正在使用cmake來構建該程序。 (我實際上使用的是ROS,因此使用的是rosmake,但基數是cmake,所以我認爲它的問題比ROS更多)。 假設使用icc構建的文件是x.c並生成x.s文件。我想在我的文件y.cpp中使用來自x.c的功能a()。 在y.cpp我:鏈接一個.s文件與CMake

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

,但其作品,如果CMakeLists.txt

rosbuild_add_executable(y y.cpp x.c) 

rosbuild_add_executable is analogous to add_executable(...) 

如果我建立x.cicc並嘗試包括x.s文件,而不是:

rosbuild_add_executable(y y.cpp x.s) 

它不工作。我應該如何改變我在y.cpp中撥打a()的方式?或者有其他方式可以將它鏈接起來。

回答

6

當使用gcc時,你可以編譯.S文件與你的C編譯器(ASM需要沒有明確調用)。 CMake的可被告知這樣做使用

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

爲每個.S文件。

+0

你知道關聯S文件與gcc一般? 像在makefile中一樣,它將沿着 .SYS:0 \t $(CROSS_COMPILER)gcc $(CFLAGS)-c $ <-o $ @ – Slava

3

要使用.s文件,您必須在CMake中啓用匯編語言支持,並使用enable_language

你可以在這裏找到更多的信息:http://www.cmake.org/Wiki/CMake/Assembler

+0

謝謝@Guillaume。從那我假定我必須啓用相應的彙編語言,然後只需簡單地鏈接可執行文件。但我確定我在這裏錯過了一些東西。有什麼我應該在.cpp文件中做的? – canatan

+0

@canatan啓用語言並將'.s'文件添加到'add_executable'調用中就足夠了。我不確定的唯一情況是CMake是否支持英特爾彙編語言/編譯器,因爲文檔中只有兩種語言是ASM-ATT和ASM_MASM。 – Guillaume

+0

一位同事看着.s文件,說ASM-ATT ..當我做一個簡單的連接時,它給了我以下錯誤,我假設它是特定於ROS >/usr/bin/as:無法識別的選項' - > OS_PACKAGE_NAME =「landshark_dwaICCIntegration」' – canatan