• Makefile template


    1. # compile
    2. COMPILER = g++
    3. COMPILE_STD_OPTIONS = -std=c++11
    4. COMPILE_WARN_OPTIONS = -Wall
    5. COMPILE_DEBUG_OPTIONS = -g -O0
    6. # marrco
    7. MARRCOS =
    8. # directory
    9. SRC_DIR = .
    10. INCLUD_DIR = .
    11. STATIC_LIB_DIR = lib
    12. SHARED_LIB_DIR = lib
    13. OUTPUT_DIR = output
    14. # file
    15. SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
    16. SRCS = $(notdir $(SRC_FILES))
    17. OBJ_FILES = $(SRCS:.cpp=.o)
    18. DEP_FILES = $(SRCS:.cpp=.d)
    19. SRC_OBJ_FILES = $(SRC_FILES:.cpp=.o)
    20. OBJ_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(OBJ_FILES))
    21. DEP_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(DEP_FILES))
    22. # static library
    23. STATIC_LIBS =
    24. # shared libraty
    25. SHARED_LIBS =
    26. # compile options
    27. MARRCO_OPTIONS = $(addprefix -D, $(MARRCOS))
    28. INCLUDE_DIR_OPTIONS = $(addprefix -I, $(INCLUD_DIR))
    29. COMPILE_OPTIONS = $(COMPILE_STD_OPTIONS) \
    30. $(COMPILE_WARN_OPTIONS) \
    31. $(COMPILE_DEBUG_OPTIONS) \
    32. $(MARRCO_OPTIONS) \
    33. $(INCLUDE_DIR_OPTIONS) \
    34. -ffunction-sections \
    35. -fdata-sections \
    36. -fPIC
    37. # link options
    38. STATIC_LIB_DIR_OPTINOS = $(addprefix -L, $(STATIC_LIB_DIR))
    39. SHARED_LIB_DIR_OPTINOS = $(addprefix -L, $(SHARED_LIB_DIR))
    40. STATIC_LIBS_OPTIONS = $(addprefix -l, $(STATIC_LIBS))
    41. SHARED_LIBS_OPTIONS = $(addprefix -l, $(SHARED_LIBS))
    42. LINK_OPTIONS = $(STATIC_LIB_DIR_OPTINOS) $(SHARED_LIB_DIR_OPTINOS ) $(STATIC_LIBS_OPTIONS) $(SHARED_LIBS_OPTIONS) -Wl,--gc-sections
    43. TARGET = $(OUTPUT_DIR)/main.exe
    44. # specify targets
    45. .PHONY:mkdir clean vars
    46. # default target
    47. default:mkdir $(TARGET)
    48. $(TARGET): $(OBJ_OUTPUT_FILES)
    49. @echo "link"
    50. $(COMPILER) $^ -o $@ $(LINK_OPTIONS)
    51. @echo "all finished"
    52. $(OUTPUT_DIR)/%.o : $(SRC_DIR)/%.cpp $(OUTPUT_DIR)/%.d
    53. @echo "compile $@"
    54. @$(COMPILER) $(COMPILE_OPTIONS) -c $< -o $@
    55. $(OUTPUT_DIR)/%.d : $(SRC_DIR)/%.cpp
    56. @(set -e; \
    57. rm -f $@; \
    58. $(COMPILER) $(COMPILE_OPTIONS) -MM $< > $@.$$$$; \
    59. sed 's,.*\.o:,$*.o $@: ,g' < $@.$$$$ > $@; \
    60. rm -f $@.$$$$)
    61. -include $(DEP_OUTPUT_FILES)
    62. mkdir:
    63. ifneq ($(OUTPUT_DIR), $(wildcard $(OUTPUT_DIR)))
    64. @echo "mkdir"
    65. @mkdir $(OUTPUT_DIR)
    66. endif
    67. clean:
    68. rm -rf $(OUTPUT_DIR)
    69. vars:
    70. @echo "SRC_FILES:$(SRC_FILES)"
    71. @echo "SRCS:$(SRCS)"
    72. @echo "OBJ_FILES:$(OBJ_FILES)"
    73. @echo "DEP_FILES:$(DEP_FILES)"
    74. @echo "SRC_OBJ_FILES:$(SRC_OBJ_FILES)"
    75. @echo "OBJ_OUTPUT_FILES:$(OBJ_OUTPUT_FILES)"
    76. @echo "DEP_OUTPUT_FILES:$(DEP_OUTPUT_FILES)"

  • 相关阅读:
    海量短视频打标问题之多模态机器学习
    提质增效,安全灵活,阿里云EDA上云方案让芯片设计驶入高速路
    SpringBoot集成微信支付JSAPIV3保姆教程
    Kafka 插件并创建 Kafka Producer 发送
    jekins完成自动化部署
    如何选择适合企业的SQL开发工具
    线上宕机问题(索引问题)
    【数据分享】山东半岛城市群规划范围数据(市县两级/shp格式)
    springBoot 属性绑定
    JS-内置对象API-Array(数组)-(二)不改变原数组的API-篇
  • 原文地址:https://blog.csdn.net/weixin_45050132/article/details/133953232