Gcc 将.s文件与CMake链接
我有一个我想使用的c函数,但它是用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
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$@