搭建vsCode+CMake开发环境 (vsCode+CMake开发环境搭建_vscode cmake_TomKing-tm的博客)
安装编译器MinGW,并在系统环境变量中添加环境变量(下载安装MinGW-w64详细步骤(c/c++的编译器gcc的windows版,win10真实可用)) MinGW_HOME = "D:\MinGW\mingw64" path中加入 %MinGW_HOME%\bin
注: ——也可以选择安装visual Studio
安装Cmake软件(CMake 常用方法-CSDN博客)
安装vscode插件C/C++、CMake、CMake Tools。(插件可以官网离线下载ms-vscode.cpptools-1.17.5@win32-x64.vsix、ms-vscode.cmake-tools-1.16.11.vsix、twxs.cmake-0.0.17.vsix)
打开vscode的terminal,验证gcc和cmake是否配置完成。
gcc --version
cmake --version
借助网络上用cmake配置udf编译文件,相应的源代码下载地址
新建文件夹libudf或者libxxx(其中xxx为任意其他字符组合)
解压udf-master.zip到当前编译目录,并重命名为src
libudf
|
——src
|
——your_udf.c
——CMakeLists.txt
|
——surpport
|
——host
——node
——pre_chore.cmd 等
其中,主要替换文件中udf源代码,以及修改src下的CMakeLists.txt
#SETTINGS
############################
set(CSOURCES test.c) #only one#改为你的udf.c名称
set(CHEADERS) #only one#
set(DIM 3d) #3D 这里默认为3ddp,若想编译成3d,则需要在host和node的CMakeLists.txt(surpport文件夹中)删除dp
SET(RELEASE 18.2.0) #22.2.0=Fluent 2022R2 可根据自己安装版本修改,可以参考Makefile文件设置
SET(FLUENT_ARCH win64) #Windows 64bit
set(LIB_RELEASE 1820) #2220=Fluent 2022R2 可根据自己安装版本修改,可以参考Makefile文件设置
#############################
cmake_minimum_required(VERSION 3.19)
project(udf) #工程名称,可以不修改采用默认
set(PARALLEL_NODE intel) #设置并行方法,一般默认intel
# set(FLUENT_INC "d:\program files\ansys182\ansys inc\v182\fluent") #此代码原文件中没有,可以在环境变量中添加
源代码同时编译host和node,因此host和node的CMakeLists.txt文件中libudf1和libudf区分
ADD_LIBRARY(libudf1 SHARED ./../../${CSOURCES} ./../../${CHEADERS} ./../udf_names.c)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION})
TARGET_LINK_LIBRARIES(libudf1 ${FLUENT_LIB})
生成的文件在3ddp_host和3ddp_node文件夹中分别以libudf.*和libudf1.*命名,源代码通过在libudf1.*对应的源文件CMakeLists.txt中添加下述代码
add_custom_command(TARGET libudf1
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/libudf1.dll ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/libudf.dll #重命名libudf1.dll为libudf.dll
)
vscode打开文件夹,选择上述创建的libudf文件夹
一般界面会出现下树代码,选择第一个,如果没出现则可以通过ctrl+shift+P ,输入CMake: configure
来设置;选择后在libudf文件下出现一个build文件夹
${workspaceFolder}/src/CMakeLists.txt
${workspaceFolder}/src/surpport/host/CMakeLists.txt
${workspaceFolder}/src/surpport/node/CMakeLists.txt
3. 可以修改最下方状态栏的CMake:[Release]/debug等;以及编译工具(本教程前期所装的gcc,编译总是出问题,因此选择的visualSudio.12.0-x86_amd64);生成
4. 选择Build既可以编译完成 5. 由于使用了vs编译工具,会在host/release/和node/release/下生成文件,因此对相应的CMakeLists.txt做下述修改,原理为复制文件到上一级目录,然后删除release文件夹,并对libudf1.dll文件重命名
#host
add_custom_command(TARGET libudf1
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/$(Configuration) ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/$(Configuration)
COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/libudf1.dll ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/libudf.dll
)
#node
add_custom_command(TARGET libudf
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/$(Configuration) ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../${FLUENT_ARCH}/${VERSION}/$(Configuration)
)
打开fluent加载udf
若要调试udf,一方面加载udf,另一方面vs2013打开build文件夹下的udf.sln工程,打开test.c源代码,点击调试下的附加到进程,查看fluent的相应节点的进程pid(可在fluent里查看,如下所示;目前:一般只能附加到一个进程上)
注:
初始编译会出现一个报错,为sys_master.h(D:\Program Files\ansys182\ANSYS Inc\v182\fluent\fluent18.2.0\client\src\sys_master.h)中cbrt重定义,只需要把相应代码(在1469行)注释掉即可,此代码针对vs2012版本以前的提供,vs2012以后版本提供,不需要定义。
/* cube-root for systems that don't have it */
/* Visual Studio 2012 onwards has cbrt, so define for earlier versions only. */
/#ifndef __PGI
#if _MSC_VER < 1700
#define cbrt(_x) pow(_x, 1.0/3.0)
#else
extern double cbrt(double);
extern float cbrtf(float);
#endif
#endif
vs编译工具需要选在X86_amd64
对于高版本的头文件库可能有增加,需要查看响应版本的makefile文件,做一定的修改;
include_directories(
${PROJECT_SOURCE_DIR}/support
${FLUENT_INC}\\fluent${RELEASE}\\${FLUENT_ARCH}\\${VERSION}
${FLUENT_INC}\\fluent${RELEASE}\\src\\main
${FLUENT_INC}\\fluent${RELEASE}\\src\\addon-wrapper
${FLUENT_INC}\\fluent${RELEASE}\\src\\io
${FLUENT_INC}\\fluent${RELEASE}\\src\\species
${FLUENT_INC}\\fluent${RELEASE}\\src\\pbns
${FLUENT_INC}\\fluent${RELEASE}\\src\\numerics
${FLUENT_INC}\\fluent${RELEASE}\\src\\sphysics
${FLUENT_INC}\\fluent${RELEASE}\\src\\storage
${FLUENT_INC}\\fluent${RELEASE}\\src\\mphase
${FLUENT_INC}\\fluent${RELEASE}\\src\\bc
${FLUENT_INC}\\fluent${RELEASE}\\src\\models
${FLUENT_INC}\\fluent${RELEASE}\\src\\material
${FLUENT_INC}\\fluent${RELEASE}\\src\\amg
${FLUENT_INC}\\fluent${RELEASE}\\src\\util
${FLUENT_INC}\\fluent${RELEASE}\\src\\mesh
${FLUENT_INC}\\fluent${RELEASE}\\src\\udf
${FLUENT_INC}\\fluent${RELEASE}\\src\\ht
${FLUENT_INC}\\fluent${RELEASE}\\src\\dx
${FLUENT_INC}\\fluent${RELEASE}\\src\\turbulence
${FLUENT_INC}\\fluent${RELEASE}\\src\\acoustics
${FLUENT_INC}\\fluent${RELEASE}\\src\\parallel
${FLUENT_INC}\\fluent${RELEASE}\\src\\etc
${FLUENT_INC}\\fluent${RELEASE}\\src\\ue
${FLUENT_INC}\\fluent${RELEASE}\\src\\dpm
${FLUENT_INC}\\fluent${RELEASE}\\src\\dbns
${FLUENT_INC}\\fluent${RELEASE}\\cortex\\src
${FLUENT_INC}\\fluent${RELEASE}\\client\\src
${FLUENT_INC}\\fluent${RELEASE}\\tgrid\\src
${FLUENT_INC}\\fluent${RELEASE}\\multiport\\src
${FLUENT_INC}\\fluent${RELEASE}\\multiport\\mpi_wrapper\\src
${FLUENT_INC}\\include)
本文章使用limfx的vscode插件快速发布