C语言包装C++对外提供接口(使用CMake工具)
2021/9/8 20:08:22
本文主要是介绍C语言包装C++对外提供接口(使用CMake工具),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
CMakeLists.txt
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13) #项目名称 project(cwrapcpp) add_library(cwrapcpp SHARED wrap1.cpp) # find_package(Qt5 COMPONENTS Widgets Core Gui Charts HINTS "D:\\Qt\\Qt5.9.7\\5.9.7\\msvc2017_64\\lib\\cmake") # include(GenerateExportHeader) generate_export_header(cwrapcpp PREFIX_NAME C_) # target_compile_definitions(cwrapcpp PRIVATE cwrapcpp_EXPORTS) target_include_directories(cwrapcpp PRIVATE ${CMAKE_BINARY_DIR}) target_link_libraries(cwrapcpp PRIVATE Qt5::Widgets Qt5::Gui Qt5::Core Qt5::Charts) add_compile_options("<<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>") add_compile_options("<<C_COMPILER_ID:MSVC>:/source-charset:utf-8>") # set_property(SOURCE wrap1.cppsry PROPERTY LANGUAGE CXX) # install(TARGETS cwrapcpp DESTINATION ${CMAKE_BINARY_DIR}/install) install(FILES ${CMAKE_BINARY_DIR}/cwrapcpp_export.h wrap.h DESTINATION ${CMAKE_BINARY_DIR}/install)
cwrapcpp_export.h(CMake自动生成)
#ifndef C_CWRAPCPP_EXPORT_H #define C_CWRAPCPP_EXPORT_H #ifdef C_CWRAPCPP_STATIC_DEFINE # define C_CWRAPCPP_EXPORT # define C_CWRAPCPP_NO_EXPORT #else # ifndef C_CWRAPCPP_EXPORT # ifdef cwrapcpp_EXPORTS /* We are building this library */ # define C_CWRAPCPP_EXPORT __declspec(dllexport) # else /* We are using this library */ # define C_CWRAPCPP_EXPORT __declspec(dllimport) # endif # endif # ifndef C_CWRAPCPP_NO_EXPORT # define C_CWRAPCPP_NO_EXPORT # endif #endif #ifndef C_CWRAPCPP_DEPRECATED # define C_CWRAPCPP_DEPRECATED __declspec(deprecated) #endif #ifndef C_CWRAPCPP_DEPRECATED_EXPORT # define C_CWRAPCPP_DEPRECATED_EXPORT C_CWRAPCPP_EXPORT C_CWRAPCPP_DEPRECATED #endif #ifndef C_CWRAPCPP_DEPRECATED_NO_EXPORT # define C_CWRAPCPP_DEPRECATED_NO_EXPORT C_CWRAPCPP_NO_EXPORT C_CWRAPCPP_DEPRECATED #endif #if 0 /* DEFINE_NO_DEPRECATED */ # ifndef C_CWRAPCPP_NO_DEPRECATED # define C_CWRAPCPP_NO_DEPRECATED # endif #endif #endif /* C_CWRAPCPP_EXPORT_H */
wrap.h
#ifndef __WRAP_H__ #define __WRAP_H__ #include "cwrapcpp_export.h" //错误写法 //#define extern "C" { #ifdef __cplusplus extern "C" { #endif C_CWRAPCPP_EXPORT void qplot(int); C_CWRAPCPP_EXPORT void qplotstr(char*); #ifdef __cplusplus } #endif #endif
wrap1.cpp
#include "wrap1.h" #include <iostream> #include "wrap.h" #include <QApplication> #include <QWidget> #include <QLabel> //构造函数 Ca::Ca(int a){ std::cout<<"Ca get a num"<<a<<"\n"; } // void qplot(int v){ int argc = 0; char *argv[]={nullptr}; QApplication app(argc,argv); QWidget widget; Ca a(v); widget.show(); app.exec(); } // void qplotstr(char* v){ std::cout<<"in qplotstr get "<<v<<std::endl; }
wrap1.h
#pragma once class Ca{ public: Ca(int); };
这篇关于C语言包装C++对外提供接口(使用CMake工具)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用