1. 程式人生 > 其它 >[C++][cmake]C++呼叫C語言

[C++][cmake]C++呼叫C語言

在軟體開發中,有時候需要在C++中呼叫C語言的程式碼,核心的解決辦法就是新增extern "C",為了完整的演示呼叫過程,這裡將採用CMakeLists.txt方式編譯執行一個完整程式碼。

// 在xxx.h檔案中
#ifdef __cplusplus
extern "C" {
#endif
void test(int a); // 新增C語言的函式宣告 
#ifdef __cplusplus
}

程式碼目錄結構

├── build  編譯輸出的資料夾
├── mk.sh  編譯指令碼
└── test   原始碼
    ├── CMakeLists.txt
    ├── main.cpp
    ├── test.c
    └── test.h

CMakeLists.txt檔案

# 版本cmake最低要求
cmake_minimum_required(VERSION 2.8)

# 專案名稱
project(test)

# 新增所有的cpp檔案
FILE(GLOB SRC_FILE_CPP ${PROJECT_SOURCE_DIR}/*.cpp)

# 新增所有的c檔案
FILE(GLOB SRC_FILE_C ${PROJECT_SOURCE_DIR}/*.c)

# 新增標頭檔案路徑
include_directories(
  ${PROJECT_SOURCE_DIR}/
)

# 可執行檔案
add_executable(${PROJECT_NAME} ${SRC_FILE_CPP} ${SRC_FILE_C})

程式碼

  • main.cpp
#include <iostream>
#include <test.h>

using namespace std;

int main() {
    cout << "[main.cpp] runing" << endl;
    test(123);
    cout << "[main.cpp] ------" << endl;

    return 0;
}
  • test.c
#include "test.h"
#include <stdio.h>
void test(int a) 
{
    printf("[test.c] test a = %d\n", a);
}
  • test.h
#ifndef _CALC_H_
#define _CALC_H_

#ifdef __cplusplus
extern "C" {
#endif

void test(int a);  

#ifdef __cplusplus
}
#endif

#endif

編譯指令碼

  • mk.sh
# 版本cmake最低要求
cmake_minimum_required(VERSION 2.8)

# 專案名稱
project(test)

# 新增所有的cpp檔案
FILE(GLOB SRC_FILE_CPP ${PROJECT_SOURCE_DIR}/*.cpp)

# 新增所有的c檔案
FILE(GLOB SRC_FILE_C ${PROJECT_SOURCE_DIR}/*.c)

# 新增標頭檔案路徑
include_directories(
  ${PROJECT_SOURCE_DIR}/
)

# 可執行檔案
add_executable(${PROJECT_NAME} ${SRC_FILE_CPP} ${SRC_FILE_C})

執行結果