如何解释编译系统应该使用哪种编译器(gcc)

How to explain to perforce-jam build system which compiler (gcc) it should use

本文关键字:编译器 gcc 何解释 解释 编译系统      更新时间:2023-10-16

我尝试使用制作"helloworld-project"

  • 堵塞(性能)构建系统
  • C++
  • Linux
  • arm poky linux gneabi gcc编译程序

helloworld performce jam.cpp

#include <stdio.h>
int main(int args, char* argv[])
{
    printf("nnnHello World from HELLOWORLD-PERFORCE-JAM!!!nnnn");
    return 0; 
}

Jamfile

Echo $(CC) ;
Main helloworld-perforce-jam : helloworld-perforce-jam.cpp ;

如果我将在没有Jam构建系统的情况下直接使用arm-poky-linux-gneabi-gcc,则没有阻塞程序,如:

ygyerts@ygyerts:$ /home/user/full_path/arm-poky-linux-gnueabi-gcc helloworld-perforce-jam.cpp

将创建一个用于ARM体系结构的可执行文件。

如果我使用默认的gcc(由Jam定义),就没有阻塞器,例如:

ygyerts@ygyerts:$ jam
cc 
...found 66 target(s)...
...updating 1 target(s)...
Link helloworld-perforce-jam 
Chmod1 helloworld-perforce-jam 
...updated 1 target(s)...

有一个可执行文件用于x86体系结构!!!将被创建。

但这个想法是使用自定义的gcc编译器(/home/user/full_path/arm-poky-linux-gneabi-gcc)。这是一个障碍,我不知道怎么。。。

我试着玩果酱可执行文件的参数,如下所示:

ygyerts@ygyerts:$ jam -s CC=/home/user/full_path/arm-poky-linux-gnueabi-gcc
/home/user/full_path/arm-poky-linux-gnueabi-gcc
...found 66 target(s)...
...updating 2 target(s)...
C++ helloworld-perforce-jam.o 
Link helloworld-perforce-jam 
helloworld-perforce-jam.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
/home/ygyerts/TOOLING/TeamCity/TeamCity-9.1.7/buildAgent/work/e58af29ade3fd40c/fsl-community-bsp/build/tmp/sysroots/x86_64-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc  -o helloworld-perforce-jam  helloworld-perforce-jam.o   
...failed Link helloworld-perforce-jam ...
...failed updating 1 target(s)...
...updated 1 target(s)...

请帮助我了解如何设置所有所需的环境,以使用arm-linux架构构建helloworld,而不是使用x86_64-linux。。。

我认为问题是你已经设置了C编译器的路径,但C++编译器(通常也是链接器)

尝试:jam -sCC=/home/user/full_path/arm-poky-linux-gnueabi-gcc -sC++=/home/user/full_path/arm-poky-linux-gnueabi-gcc

您可能还想添加"-dx"调试标志,它将显示jam实际执行的命令。

如果你觉得很勇敢,请查看Perforce Jamrules(有一个名为SetCommonCompiler的规则可以帮助设置交叉编译器):https://swarm.workshop.perforce.com/projects/perforce_software-p4/files/2016-1/Jamrules

有一些配置可以在各种平台上构建,并带有适当的编译器标志,但这不适合胆小的人。