Makefile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. cc := g++
  2. name := pro
  3. workdir := workspace
  4. srcdir := src
  5. objdir := objs
  6. stdcpp := c++11
  7. cuda_home := /usr/local/cuda-12
  8. cuda_arch := 8.6
  9. nvcc := $(cuda_home)/bin/nvcc -ccbin=$(cc)
  10. project_include_path := src
  11. opencv_include_path := /usr/local/include/opencv4
  12. trt_include_path := /opt/nvidia/tensorrt/TensorRT-8.6.1.6/include/
  13. cuda_include_path := $(cuda_home)/include
  14. ffmpeg_include_path :=
  15. include_paths := $(project_include_path) \
  16. $(opencv_include_path) \
  17. $(trt_include_path) \
  18. $(cuda_include_path) \
  19. $(ffmpeg_include_path)
  20. opencv_library_path := /usr/local/lib/
  21. trt_library_path := /opt/nvidia/tensorrt/TensorRT-8.6.1.6/lib/
  22. cuda_library_path := $(cuda_home)/lib64/
  23. ffmpeg_library_path :=
  24. library_paths := $(opencv_library_path) \
  25. $(trt_library_path) \
  26. $(cuda_library_path) \
  27. $(cuda_library_path) \
  28. $(ffmpeg_library_path)
  29. link_ffmpeg := avcodec avformat swresample swscale avutil
  30. link_opencv := opencv_core opencv_imgproc opencv_videoio opencv_imgcodecs
  31. link_trt := nvinfer nvinfer_plugin nvonnxparser
  32. link_cuda := cuda cublas cudart cudnn
  33. link_sys := stdc++ dl
  34. link_librarys := $(link_ffmpeg) $(link_opencv) $(link_trt) $(link_cuda) $(link_sys)
  35. empty :=
  36. library_path_export := $(subst $(empty) $(empty),:,$(library_paths))
  37. # 把库路径和头文件路径拼接起来成一个,批量自动加-I、-L、-l
  38. run_paths := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
  39. include_paths := $(foreach item,$(include_paths),-I$(item))
  40. library_paths := $(foreach item,$(library_paths),-L$(item))
  41. link_librarys := $(foreach item,$(link_librarys),-l$(item))
  42. cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -m64 -fPIC -fopenmp -pthread $(include_paths)
  43. cu_compile_flags := -Xcompiler "$(cpp_compile_flags)"
  44. link_flags := -pthread -fopenmp -Wl,-rpath='$$ORIGIN' $(library_paths) $(link_librarys)
  45. cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
  46. cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
  47. cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
  48. cpp_mk := $(cpp_objs:.cpp.o=.cpp.mk)
  49. # 定义cu文件的路径查找和依赖项mk文件
  50. cu_srcs := $(shell find $(srcdir) -name "*.cu")
  51. cu_objs := $(cu_srcs:.cu=.cu.o)
  52. cu_objs := $(cu_objs:$(srcdir)/%=$(objdir)/%)
  53. cu_mk := $(cu_objs:.cu.o=.cu.mk)
  54. # 所有的头文件依赖产生的makefile文件,进行include
  55. ifneq ($(MAKECMDGOALS), clean)
  56. include $(mks)
  57. endif
  58. $(name) : $(workdir)/$(name)
  59. all : $(name)
  60. run : $(name)
  61. @cd $(workdir) && python test.py
  62. runhdd : $(name)
  63. @cd $(workdir) && python test_hard_decode_yolov5.py
  64. pro : $(workdir)/pro
  65. runpro : pro
  66. @cd $(workdir) && ./pro
  67. $(workdir)/$(name) : $(cpp_objs) $(cu_objs)
  68. @echo Link $@
  69. @mkdir -p $(dir $@)
  70. @$(cc) -shared $^ -o $@ $(link_flags)
  71. $(workdir)/pro : $(cpp_objs) $(cu_objs)
  72. @echo Link $@
  73. @mkdir -p $(dir $@)
  74. @$(cc) $^ -o $@ $(link_flags)
  75. $(objdir)/%.cpp.o : $(srcdir)/%.cpp
  76. @echo Compile CXX $<
  77. @mkdir -p $(dir $@)
  78. @$(cc) -c $< -o $@ $(cpp_compile_flags)
  79. $(objdir)/%.cu.o : $(srcdir)/%.cu
  80. @echo Compile CUDA $<
  81. @mkdir -p $(dir $@)
  82. @$(nvcc) -c $< -o $@ $(cu_compile_flags)
  83. # 编译cpp依赖项,生成mk文件
  84. $(objdir)/%.cpp.mk : $(srcdir)/%.cpp
  85. @echo Compile depends C++ $<
  86. @mkdir -p $(dir $@)
  87. @$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)
  88. # 编译cu文件的依赖项,生成cumk文件
  89. $(objdir)/%.cu.mk : $(srcdir)/%.cu
  90. @echo Compile depends CUDA $<
  91. @mkdir -p $(dir $@)
  92. @$(nvcc) -M $< -MF $@ -MT $(@:.cu.mk=.cu.o) $(cu_compile_flags)
  93. # 定义清理指令
  94. clean :
  95. @rm -rf $(objdir) $(workdir)/$(name) $(workdir)/pro $(workdir)/*.trtmodel $(workdir)/imgs
  96. # 防止符号被当做文件
  97. .PHONY : clean run $(name)
  98. # 导出依赖库路径,使得能够运行起来
  99. export LD_LIBRARY_PATH:=$(library_path_export)