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

如何在Premake5管理的C++项目中添加C文件?

在Premake5 C++项目中添加并使用C文件的方法

完全可以在同一个Premake5项目中混合使用C和C++代码,下面是具体操作步骤:


1. 修改Premake项目脚本,添加C文件

你不需要修改language "C++"配置——Premake会自动根据文件后缀(.c)选择C编译器处理对应的文件,.cpp文件仍会用C++编译器编译。

直接在files列表中添加你的kdtree C文件路径即可。如果你的C文件在../src目录下,当前的"../src/**"已经包含该目录下所有文件,可不用额外添加;如果文件在其他路径,单独补充路径:

project"Particles"

  kind "ConsoleApp"
  language "C++"
  targetdir "../build/%{prj.name}/%{cfg.buildcfg}"
  includedirs { "../include", "../deps/include", "../include/engine", "../deps/include/stb", "../deps/include/imgui", "../deps/include/tests" }
  conan_config_exec()
  debugargs { _MAIN_SCRIPT_DIR .. "/examples/data" }
  files {
    "../deps/src/**",
    "../deps/include/**",
    "../src/**",
    "../include/**",
    "../tests/particles_test.cpp",
    "../assets/**",
    "../path/to/your/kdtree.c" -- 替换为实际C文件路径
  }
  filter "files:**.obj"
      flags { "ExcludeFromBuild" }

2. 处理C++调用C代码的兼容性问题

C会对函数名进行名字修饰,而C不会,直接在C中调用C函数会导致链接错误。解决方法是用extern "C"包裹C头文件:

方式一:在C++代码中包裹引用

在调用C函数的C++文件中,这样包含C头文件:

extern "C" {
  #include "kdtree.h" // 替换为你的C头文件名
}

方式二:在C头文件中添加条件编译

更通用的做法是修改C头文件,让它在被C++编译器包含时自动启用extern "C":

// kdtree.h
#ifndef KDTREE_H
#define KDTREE_H

#ifdef __cplusplus
extern "C" {
#endif

// 这里放置所有C函数声明,例如:
void kdtree_create();
int kdtree_insert(void* data);
// ... 其他函数

#ifdef __cplusplus
}
#endif

#endif // KDTREE_H

3. 重新生成并验证构建

  1. 运行Premake命令重新生成Visual Studio解决方案(根据你的VS版本调整命令):
    premake5 vs2022
    
  2. 打开生成的解决方案,编译项目,检查是否有编译或链接错误。如果出现未定义符号的错误,优先检查extern "C"是否正确配置,以及C文件是否被正确添加到项目中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:12:34