You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CMake构建QNX应用程序 解决qcc编译参数冲突报错问题

报错根因

你遇到的cc: Can't specify -P, -C, -E, -c or -S with -o and have multiple files报错,核心原因是工具链参数的配置顺序错误:project()命令执行时会立即触发编译器检测逻辑,你将CMAKE_C_COMPILER_TARGET、CMAKE_CXX_COMPILER_TARGET等交叉编译参数放在了project()之后,参数未生效,CMake会把架构标识误判为额外的输入源文件,导致编译命令里同时出现多个输入文件、-c编译参数、-o输出参数,不符合qcc/q++的语法规则。

修复方案

  • 调整参数配置顺序:所有交叉编译相关的全局参数,必须放在project()命令之前声明,确保编译器检测时参数已生效
  • 启用CMAKE_SYSROOT配置:QNX 7.1编译必须指定sysroot路径,编译前需先加载QNX SDK的环境脚本,确保QNX_TARGET环境变量正常生效
  • 显式传递编译目标参数:避免CMake自动识别参数异常,直接在C/CXX编译参数中声明目标架构

修改后的完整CMakeLists.txt示例:

cmake_minimum_required(VERSION 3.14)

# 所有交叉编译参数必须放在project命令之前
set(CMAKE_SYSTEM_NAME QNX)
set(arch gcc_ntoaarch64le_gpp)
set(ntoarch aarch64le)
set(QNX_PROCESSOR aarch64le)

set(CMAKE_C_COMPILER qcc)
set(CMAKE_C_COMPILER_TARGET ${arch})
set(CMAKE_CXX_COMPILER q++)
set(CMAKE_CXX_COMPILER_TARGET ${arch})

set(CMAKE_SYSROOT $ENV{QNX_TARGET})
# 显式指定编译目标参数,避免识别异常
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -V${arch}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -V${arch}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -V${arch}")

project(test)

add_executable(hello src/testhello.cpp)

操作验证步骤:

  1. 编译前先执行source <你的QNX7.1 SDK安装路径>/qnxsdp-env.sh加载环境变量
  2. 清空之前的构建缓存,删除build目录下所有生成文件
  3. 重新执行cmake .. && make即可正常编译

内容的提问来源于stack exchange,提问作者Rigel Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:06