天天看点

swmm与lisflood-fp源码如何一起编译 CMake命令

cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
include(CheckLanguage)

project(lisflood-fp)

set(_CONFIG config.default.cmake CACHE FILEPATH "CMake config file")
include(${_CONFIG})

if (NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE Release)
endif()
  
enable_language(C)


list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)

add_library(lisflood-base INTERFACE)
target_sources(lisflood-base INTERFACE
	climate.c
	controls.c
	culvert.c
	datetime.c
	dwflow.c
	dynwave.c
	error.c
	exfil.c
	findroot.c
	flowrout.c
	forcmain.c
	gage.c
	gwater.c
	hash.c
	hotstart.c
	iface.c
	infil.c
	inflow.c
	input.c
	inputrpt.c
	keywords.c
	kinwave.c
	landuse.c
	lid.c
	lidproc.c
	link.c
	massbal.c
	mathexpr.c
	mempool.c
	node.c
	odesolve.c
	output.c
	project.c
	qualrout.c
	rain.c
	rdii.c
	report.c
	roadway.c
	routing.c
	runoff.c
	shape.c
	snow.c
	stats.c
	statsrpt.c
	subcatch.c
	surfqual.c
	swmm5.c
	table.c
	toposort.c
	transect.c
	treatmnt.c
	xsect.c
    boundary.cpp
	ch_flow.cpp
	chkpnt.cpp
	fp_acc.cpp
	fp_flow.cpp
	fp_trent.cpp
	infevap.cpp
	input.cpp
	iterateq.cpp
	output.cpp
	pars.cpp
	por_flow.cpp
	sgc.cpp
	util.cpp
	utility.cpp
	weir_flow.cpp
	lisflood2/DataTypes.cpp
	lisflood2/file_tool.cpp
	lisflood2/lis2_output.cpp
	lisflood2/lisflood_processing.cpp
	lisflood2/sgm_fast.cpp
	lisflood2/windows_ext.cpp
	rain/rain.cpp
	swe/boundary.cpp
	swe/dg2.cpp
	swe/fields.cpp
	swe/flux.cpp
	swe/fv1.cpp
	swe/hll.cpp
	swe/input.cpp
	swe/output.cpp
	swe/stats.cpp
	swe/fv1/modifiedvars.cpp
	swe/dg2/dg2_output.cpp
	swe/dg2/fields.cpp
	swe/dg2/friction.cpp
	swe/dg2/modifiedvars.cpp
	swe/dg2/slope_limiter.cpp
)

add_executable(lisflood)
target_sources(lisflood PRIVATE lisflood.cpp)
target_link_libraries(lisflood PRIVATE lisflood-base)

check_language(CUDA)
if (CMAKE_CUDA_COMPILER)
	enable_language(CUDA)
	set_property(TARGET lisflood PROPERTY CUDA_SEPARABLE_COMPILATION ON)
	
	add_compile_definitions(CUDA)
	target_sources(lisflood PRIVATE
		cuda/cuda_boundary.cu
		cuda/cuda_dem.cu
		cuda/cuda_flow.cu
		cuda/cuda_geometry.cu
		cuda/cuda_hll.cu
		cuda/cuda_max_field.cu
		cuda/cuda_rain.cu
		cuda/cuda_sample.cu
		cuda/cuda_simulate.cu
		cuda/cuda_snapshot.cu
		cuda/cuda_solver.cu
		cuda/cuda_stats.cu
		cuda/cuda_unifiedallocator.cu
		cuda/cuda_util.cu
		cuda/ghostraster.cpp
		cuda/io.cpp
		cuda/sample.cpp
		cuda/stats.cpp
		cuda/fv1/cuda_fv1_flow.cu
		cuda/fv1/cuda_fv1_simulate.cu
		cuda/fv1/cuda_fv1_snapshot.cu
		cuda/fv1/cuda_fv1_solver.cu       
		cuda/dg2/cuda_dg2_dem.cu
		cuda/dg2/cuda_dg2_flow.cu
		cuda/dg2/cuda_dg2_simulate.cu
		cuda/dg2/cuda_dg2_slope_limit.cu
		cuda/dg2/cuda_dg2_snapshot.cu
		cuda/dg2/cuda_dg2_solver.cu
	)
	target_include_directories(lisflood PUBLIC cuda cuda/common)
endif()

add_executable(generateDG2DEM preprocess/generateDG2DEM.cpp)
target_link_libraries(generateDG2DEM PRIVATE lisflood-base)

find_package(OpenMP)
if (OpenMP_CXX_FOUND)
	target_link_libraries(lisflood-base INTERFACE OpenMP::OpenMP_CXX)
endif()

if (UNIX)
	find_package(NUMA REQUIRED)
	target_include_directories(lisflood-base INTERFACE ${NUMA_INCLUDE_DIRS})
	target_link_libraries(lisflood-base INTERFACE ${NUMA_LIBRARIES})
endif()

if (_NETCDF)
	if (WIN32)
		target_include_directories(lisflood-base INTERFACE windep/netCDF4-64/include) # TODO: x64 only
		target_link_directories(lisflood-base INTERFACE windep/netCDF4-64/lib) # TODO: x64 only
		target_link_libraries(lisflood-base INTERFACE netcdf)
		file(GLOB DLLS "DLL's/*.dll")
		file(COPY ${DLLS} DESTINATION ${CMAKE_BINARY_DIR})
	else()
		find_package(NetCDF REQUIRED)
		target_include_directories(lisflood-base INTERFACE ${NetCDF_INCLUDE_DIRS})
		target_link_libraries(lisflood-base INTERFACE NetCDF::NetCDF)
	endif()
	target_compile_definitions(lisflood-base INTERFACE _NETCDF=1)
else()
	target_compile_definitions(lisflood-base INTERFACE _NETCDF=0)
endif()

if (CMAKE_BUILD_TYPE MATCHES Debug)
	target_compile_definitions(lisflood-base INTERFACE _DEBUG)
endif()
           

有需要进一步交流的朋友吗,看下面:

swmm与lisflood-fp源码如何一起编译 CMake命令

继续阅读