如何在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. 重新生成并验证构建
- 运行Premake命令重新生成Visual Studio解决方案(根据你的VS版本调整命令):
premake5 vs2022 - 打开生成的解决方案,编译项目,检查是否有编译或链接错误。如果出现未定义符号的错误,优先检查
extern "C"是否正确配置,以及C文件是否被正确添加到项目中。
内容的提问来源于stack exchange,提问作者agutier2
相关产品推荐
相关产品推荐

