[C++][cmake]C++呼叫C語言
阿新 • • 發佈:2021-10-10
在軟體開發中,有時候需要在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})