Gcc 将.s文件与CMake链接

Gcc 将.s文件与CMake链接,gcc,cmake,icc,ros,Gcc,Cmake,Icc,Ros,我有一个我想使用的c函数,但它是用Intel编译器而不是gnuc编译器编译的。我正在使用cmake构建程序。 (我实际上使用的是ROS,因此rosmake,但基础是cmake,因此我认为这更像是一个cmake问题,而不是ROS问题)。 假设使用icc构建的文件是x.c,并生成一个x.s文件。我想在我的文件y.cpp中使用x.c中的函数a()。 在y.cpp中,我有: #include "x.h" ..... call a() 如果CMakeLists.txt具有 rosbuild_add

我有一个我想使用的c函数,但它是用
Intel
编译器而不是
gnu
c
编译器编译的。我正在使用
cmake
构建程序。 (我实际上使用的是
ROS
,因此
rosmake
,但基础是
cmake
,因此我认为这更像是一个cmake问题,而不是
ROS
问题)。 假设使用
icc
构建的文件是
x.c
,并生成一个
x.s
文件。我想在我的文件
y.cpp
中使用
x.c
中的函数
a()。
在
y.cpp
中,我有:

#include "x.h" 
..... 
call a() 
如果
CMakeLists.txt
具有

rosbuild_add_executable(y y.cpp x.c)

rosbuild_add_executable is analogous to add_executable(...) 
但是如果我使用
icc
构建
x.c
,并尝试包含
x.s
文件:

rosbuild_add_executable(y y.cpp x.s) 

它不起作用。在
y.cpp
中调用
a()?或者是否有其他方式将其联系起来

要使用
.s
文件,您必须使用
启用语言
在CMake中启用汇编语言支持


您可以在此处找到更多信息:

使用gcc时,您可以使用C编译器编译
.S
文件(无需显式调用asm)。可以告诉CMake使用

set_property(SOURCE <myfile>.S PROPERTY LANGUAGE C)
set_属性(SOURCE.S属性语言C)

对于您的每个
.S
文件。

谢谢@Guillaume。由此,我假设我必须启用相应的汇编语言,然后只需将文件链接到可执行文件中。但我真的确定我错过了什么。在.cpp文件中有什么我应该做的吗?@canatan启用该语言并将
.s
文件添加到您的
add\u可执行文件
调用中就足够了。我唯一不确定的是CMake是否支持英特尔汇编语言/编译器,因为文档中仅有的两种语言是ASM-ATT和ASM_MASM。一位同事查看了.s文件,说它的ASM-ATT。。当我做一个简单的链接时,它会给我以下错误,我假设这是特定于ROS>/usr/bin/as的:无法识别的选项'->OS_PACKAGE\u NAME=“landshark\u dwaICCIntegration”'这很奇怪。。。你确定你没有在你的CmakeList中的某个地方设置这个
OS\u包\u名称
?我使用的是ROS,它使用的是rosbuild,我想它使用的是CMAKE。。我认为这是一个ROS的东西。你知道一种将S文件与gcc相关联的方法吗?就像在makefile中一样,它将是smth-along.S.o:$(交叉编译器)gcc$(CFLAGS)-c$<-o$@