[C.C++] 用cmake创建一个c++工程,调用c语言函数打印“c hello!”。

652 0
Honkers 2025-3-6 22:55:01 | 显示全部楼层 |阅读模式

要使用CMake创建一个C++工程,并在其中调用C语言函数以打印“C hello!”,你可以按照以下步骤操作:

1. 项目目录结构

首先,确保你的项目目录结构如下:

  1. CPlusPlusWithCLibrary
  2. ├── CMakeLists.txt
  3. └── src
  4. ├── main.cpp
  5. ├── example.c
  6. └── example.h
复制代码

2. C语言代码

src/example.c

  1. #include <stdio.h>
  2. void print_c_hello() {
  3. printf("C hello!\n");
  4. }
复制代码

src/example.h

  1. #ifndef EXAMPLE_H
  2. #define EXAMPLE_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. void print_c_hello();
  7. #ifdef __cplusplus
  8. }
  9. #endif
  10. #endif // EXAMPLE_H
复制代码

3. C++代码

src/main.cpp

  1. #include <iostream>
  2. #include "example.h"
  3. int main() {
  4. std::cout << "Calling C function from C++ code:" << std::endl;
  5. print_c_hello(); // 调用C语言函数
  6. return 0;
  7. }
复制代码

4. 更新CMakeLists.txt

为了让CMake正确识别并处理C语言源文件,你可以在CMakeLists.txt文件中明确指定目标的语言。以下是优化后的CMakeLists.txt文件:

CMakeLists.txt

  1. cmake_minimum_required(VERSION 3.10)
  2. project(CPlusPlusWithCLibrary CXX C)
  3. # 指定C++标准
  4. set(CMAKE_CXX_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD_REQUIRED True)
  6. # 指定C语言标准
  7. set(CMAKE_C_STANDARD 99)
  8. set(CMAKE_C_STANDARD_REQUIRED True)
  9. # 添加C语言源文件
  10. add_library(c_library STATIC src/example.c)
  11. # 添加C++源文件
  12. add_executable(my_program src/main.cpp)
  13. # 链接C语言库到C++可执行文件
  14. target_link_libraries(my_program PRIVATE c_library)
  15. # 添加头文件搜索路径
  16. target_include_directories(my_program PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
复制代码

5. 配置和构建项目

在项目根目录下,执行以下命令来配置和构建项目:

  1. mkdir build
  2. cd build
  3. cmake ..
  4. cmake --build .
复制代码

6. 运行程序

编译完成后,你可以运行生成的可执行文件:

  1. ./my_program
复制代码

总结

  • 添加语言类型:在project命令中指定项目支持C和C++语言。
  • 设置标准:在CMakeLists.txt中明确设置C和C++的标准。
  • 添加库:使用add_library创建C语言库,并用target_link_libraries将其链接到C++可执行文件。

这样,CMake就能正确识别C语言源文件,并将其链接到C++项目中。

演示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4009
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行