日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言开发之CMakeList(其三)

發布時間:2023/12/31 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言开发之CMakeList(其三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們已經介紹過單目錄結構與多目錄結構的CMakeLists.txt使用方法,下面介紹如何利用CMakeLists實現類似于C++模板的東西。下面的內容與單目錄結構以及多目錄結構CMakeLists實現密接相關,建議看完前兩個再看這一篇。

應用場景

開發某個基于C語言的項目,要求實現單精度與雙精度計算版本。

目錄結構

|--examples| |--add_example.c| |--sub_example.c| |--CMakeLists.txt|--CMakeLists.txt|--include| |--alg.h|--alg| |--add| | |--add.c| | |--CMakeLists.txt| |--sub| | |--sub.c| | |--CMakeLists.txt| |--CMakeLists.txt| |--utils| | |--alg_template.h

其中examples/add_example.c

#include "alg.h" #include<stdio.h>int main(){double a = 1.1, b = 2.1;printf("add:%lf\n", my_add64(a, b));return 0; }

example/sub_example.c

#include "alg.h" #include<stdio.h>int main(){float a = 1.1, b = 2.0;printf("sub:%f\n", my_sub32(a, b));return 0; }

include/alg.h

#ifndef __ALG_H #define __ALG_Hfloat my_sub32(float a, float b); float my_add32(float a, float b); double my_sub64(double a, double b); double my_add64(double a, double b);#endif

alg/add/add.c

#include "alg.h" #include "alg/utils/alg_template.h"FLOAT DT(my_add)(FLOAT a, FLOAT b){return a + b; }

alg/sub/sub.c

#include "alg.h" #include "alg/utils/alg_template.h"FLOAT DT(my_sub)(FLOAT a, FLOAT b){return a - b; }

alg/utils/alg_template.h

#ifndef __ALG_TEMPLATE_H #define __ALG_TEMPLATE_H#ifdef ALG32#define FLOAT float#define DT(func) func##32 #endif #ifdef ALG64#define FLOAT double#define DT(func) func##64 #endif#endif

如果我們可以分別#define ALG32,再#define ALG64,分開編譯再合并,那么就可以實現多精度項目了。
注意#include “alg/utils/alg_template.h”,頭文件寫成這樣是因為在CMakeLists.txt中添加了include_directories(${CMAKE_CURRENT_SOURCE_DIR})指定最外層目錄為include起始位置。

#最小cmake版本 cmake_minimum_required(VERSION 2.8) #項目名字,隨意起 project(simple_exe) #設置C/c++版本(如c99,c++11,c++17等版本),下面表示使用c99版本 set(CMAKE_C_STANDARD 99)#指定include目錄,作用域為全局,包括子目錄中的CMakeLists include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) #指定靜態庫輸出路徑,作用域為全局,包括子目錄中的CMakeLists link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)#將文件夾內存在CMakelist的所有文件命名為MODULES set(MODULESalgexamples )foreach(module ${MODULES})#執行每一個文件夾里面的CMakeLists.txt腳本add_subdirectory(${module}) endforeach()

alg/CMakeLists.txt 注意實現多精度精華的地方add_library(… OBJECT …)

#老三段 cmake_minimum_required(VERSION 2.8) project(simple_alg_exe) set(CMAKE_C_STANDARD 99)#設置LIBRARY_OUTPUT_PATH為庫的輸出位置 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../lib) #將文件夾內存在CMakelist的所有文件命名為MODULES set(MODULESaddsub )foreach(module ${MODULES})#執行每一個文件夾里面的CMakeLists.txt腳本add_subdirectory(${module}) endforeach()#注意不同于STATIC,OBJECT并不會在這里生成庫,而是在下一次使用add_library()時生成 add_library(alg64 OBJECT ${SRCS}) add_library(alg32 OBJECT ${SRCS})#分別為alg32/alg64指定編譯標識,-D即define,-DALG32 表示在代碼開頭#define ALG32 #通過這種方式,我們可以為代碼分別指定32位版本與64位版本 set_target_properties(alg64PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DALG64" ) set_target_properties(alg32PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DALG32" )#第二次使用add_library,生成庫 #表示將alg32與alg64合并生成alg庫 add_library(alg STATIC $<TARGET_OBJECTS:alg64> $<TARGET_OBJECTS:alg32>)#將alg.h頭文件發布到${CMAKE_CURRENT_SOURCE_DIR}/../output/include目錄中,當然可以寫一些其它的目錄,如/usr/local/lib64/include install(FILES ../include/alg.h DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/../output/include) #將libalg.a靜態庫文件發布到${CMAKE_CURRENT_SOURCE_DIR}/../output/lib目錄中 install(FILES ../lib/libalg.a DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/../output/lib)

傳送門

C語言開發之CMakeLists以及gtest測試在C語言中的使用方法(其四)
C語言開發之CMakeList(其三)
C/C++開發之CMakeList(其二)
C/C++開發之CMakeLists(其一)

總結

以上是生活随笔為你收集整理的C语言开发之CMakeList(其三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品青青草 | 麻豆成人精品 | 九色国产精品 | 国产美女精品视频国产 | 日韩黄色录像 | 后入内射欧美99二区视频 | 国产精品黄色片 | 亚洲欧美日韩电影 | 肉大捧一进一出免费视频 | 日韩第二页 | 丁香六月婷婷激情 | 免费视频爱爱太爽 | 91av视频在线免费观看 | 欧美另类国产 | 久久久久久久久久久91 | 福利综合网 | 成人污视频 | 日韩成人在线影院 | 午夜色大片 | 日本成人小视频 | 亚洲久视频| 性xxxx | 成人午夜免费观看 | 成人夜视频 | 日韩三级中文字幕 | 日本真人做爰免费视频120秒 | 日本精品视频一区二区 | 高h av| 日韩成人免费在线观看 | 国产一级一区二区 | 亚洲精品成人电影 | 99精品视频播放 | 精品综合在线 | av影视网 | 超碰在线国产 | 国产免费一区二区三区最新不卡 | 国产欧美视频一区 | 东方欧美色图 | 久久神马 | 一色屋免费视频 | 欧美色图小说 | 国产视频首页 | 精品一区二区毛片 | 伊人365| 在线观看亚洲免费视频 | 久久av在线播放 | 蜜桃av网站 | 毛片视频免费观看 | 久久一久久 | 性欧美在线视频 | 视频国产一区 | 欧美成人另类 | 精品一区二区三区毛片 | 日日碰碰 | 国产综合视频一区二区 | а√天堂8资源中文在线 | 国产视频1 | 色天堂在线视频 | 国产精品igao| 少妇人妻偷人精品一区二区 | 99精品偷自拍 | 久久综合久 | 欧美极品少妇xxxxⅹ猛交 | 婷婷伊人五月天 | a毛片| 久久国产精品久久久久久电车 | 免费一级片网址 | 东北毛片| 国产日韩一区二区 | 最新av导航| 国产日韩精品电影 | 91精彩视频 | 欧美在线视频观看 | 国产精品无码电影 | 好邻居韩国剧在线观看 | www天天操| 在线看片福利 | 色综合久久88色综合天天6 | 中文国语毛片高清视频 | 欧美69式性猛交 | 精品免费国产一区二区三区四区 | 亚洲精品久久久中文字幕痴女 | 国产老女人精品毛片久久 | 免费观看成年人视频 | 91在线看视频 | 欧美日韩18| 国产免费激情 | av鲁丝一区鲁丝二区鲁丝 | 男女啪啪在线观看 | 99久久黄色| 国产一级久久久 | 国产一级α片 | 男女国产视频 | 97在线观看| 国产精品国产三级国产专区51 | 黄色a级片网站 | 五十路在线观看 | 精品国产乱码久久久久久久 | 88久久精品无码一区二区毛片 |