Home | History | Annotate | Download | only in windows
      1 #
      2 # Copyright 2008 Google Inc.
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 # 
      8 # http://www.apache.org/licenses/LICENSE-2.0
      9 # 
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 # Microsoft Windows namke file which builds the cmockery library and example 
     17 # applications.
     18 #
     19 # To use this makefile...
     20 # Select Start->Run and run "cmd.exe" to open the command line.
     21 # Run "vsvars.bat" located in Microsoft Visual Studio's directory.
     22 # Run "nmake" to build the cmockery library and example applications.
     23 # Run "nmake clean" to delete all files built by this makefile.
     24 
     25 # Target directories.
     26 !IFNDEF EXECUTABLE_DIR
     27 EXECUTABLE_DIR=.
     28 !ENDIF # EXECUTABLE_DIR
     29 
     30 !IFNDEF LIBRARY_DIR
     31 LIBRARY_DIR=.
     32 !ENDIF # LIBRARY_DIR
     33 
     34 !IFNDEF INSTALL_DIR
     35 INSTALL_DIR=..\0_1_2
     36 !ENDIF # INSTALL_DIR
     37 
     38 !IFNDEF OBJECT_DIR
     39 OBJECT_DIR=.
     40 !ENDIF # OBJECT_DIR
     41 
     42 # Tools
     43 !IFNDEF LIBTOOL
     44 LIBTOOL=lib.exe
     45 !ENDIF # LIBTOOL
     46 
     47 !IFNDEF LINK
     48 LINK=link.exe
     49 !ENDIF # LINK
     50 
     51 # Source directories.
     52 LIBRARY_SOURCE_DIRECTORY=..\src
     53 EXAMPLE_SOURCE_DIRECTORY=..\src\example
     54 
     55 # Compiler flags and commands.
     56 CC_COMMAND=$(CC) /nologo /c /D_WIN32_WINNT=0x501 \
     57 	/I$(LIBRARY_SOURCE_DIRECTORY)\google $(CFLAGS) $(**) /Fo$(@)
     58 CC_COMMAND_UNIT_TEST=$(CC_COMMAND) /DUNIT_TESTING=1 \
     59 	/I$(EXAMPLE_SOURCE_DIRECTORY)
     60 
     61 LIBLINKFLAGS=/NOLOGO
     62 
     63 # Library archiver flags and command.
     64 LIB_COMMAND=$(LIBTOOL) $(LIBLINKFLAGS) $(LIBFLAGS) $(**) /OUT:$(@)
     65 
     66 # Linker flags and command. 
     67 LINK_COMMAND=$(LINK) $(LIBLINKFLAGS) /SUBSYSTEM:console \
     68 	libcmt.lib kernel32.lib /NODEFAULTLIB:libc.lib \
     69 	$(LFLAGS) $(**) /OUT:$(@)
     70 
     71 .SUFFIXES: .exe .lib .obj .c
     72 
     73 all: $(EXECUTABLE_DIR) $(LIBRARY_DIR) $(OBJECT_DIR) \
     74 	$(LIBRARY_DIR)\cmockery.lib examples
     75 
     76 $(EXECUTABLE_DIR):
     77 	mkdir $@
     78 
     79 !IF "$(LIBRARY_DIR)" != "$(EXECUTABLE_DIR)"
     80 $(LIBRARY_DIR):
     81 	mkdir $*
     82 !ENDIF
     83 
     84 !IF "$(OBJECT_DIR)" != "$(LIBRARY_DIR)" && \
     85 	"$(OBJECT_DIR)" != "$(EXECUTABLE_DIR)"
     86 $(OBJECT_DIR):
     87 	mkdir $@
     88 !ENDIF
     89 
     90 examples: \
     91 	$(EXECUTABLE_DIR)\calculator.exe \
     92 	$(EXECUTABLE_DIR)\calculator_test.exe \
     93 	$(EXECUTABLE_DIR)\allocate_module_test.exe \
     94 	$(EXECUTABLE_DIR)\assert_macro_test.exe \
     95 	$(EXECUTABLE_DIR)\customer_database_test.exe \
     96 	$(EXECUTABLE_DIR)\key_value_test.exe \
     97 	$(EXECUTABLE_DIR)\product_database_test.exe \
     98 	$(EXECUTABLE_DIR)\run_tests.exe
     99 
    100 install:
    101 	mkdir -p $(INSTALL_DIR)\lib
    102 	mkdir -p $(INSTALL_DIR)\include\google
    103 	cp -f $(LIBRARY_DIR)\cmockery.lib $(INSTALL_DIR)\lib
    104 	cp -f $(LIBRARY_SOURCE_DIRECTORY)\google\cmockery.h $(INSTALL_DIR)\include\google
    105 
    106 clean:
    107 	-cmd /c "@for %A in (\
    108 		$(LIBRARY_DIR)\cmockery.lib \
    109 			$(OBJECT_DIR)\cmockery.obj \
    110 		$(EXECUTABLE_DIR)\calculator.exe \
    111 			$(OBJECT_DIR)\calculator.obj \
    112 		$(EXECUTABLE_DIR)\calculator_test.exe \
    113 			$(OBJECT_DIR)\calculator_test.obj \
    114 			$(OBJECT_DIR)\calculator_test-calculator.obj \
    115 		$(EXECUTABLE_DIR)\allocate_module_test.exe \
    116 			$(OBJECT_DIR)\allocate_module_test.obj \
    117 			$(OBJECT_DIR)\allocate_module.obj \
    118 		$(EXECUTABLE_DIR)\assert_macro_test.exe \
    119 			$(OBJECT_DIR)\assert_macro_test.obj \
    120 			$(OBJECT_DIR)\assert_macro.obj \
    121 		$(EXECUTABLE_DIR)\customer_database_test.exe \
    122 			$(OBJECT_DIR)\customer_database_test.obj \
    123 			$(OBJECT_DIR)\customer_database.obj \
    124 		$(EXECUTABLE_DIR)\key_value_test.exe \
    125 			$(OBJECT_DIR)\key_value_test.obj \
    126 			$(OBJECT_DIR)\key_value.obj \
    127 		$(EXECUTABLE_DIR)\product_database_test.exe \
    128 			$(OBJECT_DIR)\product_database_test.obj \
    129 			$(OBJECT_DIR)\product_database.obj \
    130 		$(EXECUTABLE_DIR)\run_tests.exe \
    131 			$(OBJECT_DIR)\run_tests.obj) do @del %A 2>NUL"
    132 	-rmdir $(EXECUTABLE_DIR) $(OBJECT_DIR) $(LIBRARY_DIR) 2>NUL
    133 
    134 # Rules for the cmockery library.
    135 $(LIBRARY_DIR)\cmockery.lib: $(OBJECT_DIR)\cmockery.obj
    136 $(OBJECT_DIR)\cmockery.obj: $(LIBRARY_SOURCE_DIRECTORY)\cmockery.c
    137 
    138 # Rules for the calculator application.
    139 $(EXECUTABLE_DIR)\calculator.exe: $(OBJECT_DIR)\calculator.obj
    140 
    141 $(OBJECT_DIR)\calculator.obj: $(EXAMPLE_SOURCE_DIRECTORY)\calculator.c
    142 	$(CC_COMMAND)
    143 
    144 # Rules for the calculator test application.
    145 $(EXECUTABLE_DIR)\calculator_test.exe: \
    146 		$(OBJECT_DIR)\calculator_test.obj \
    147 		$(OBJECT_DIR)\calculator_test-calculator.obj \
    148 		$(LIBRARY_DIR)\cmockery.lib
    149 	$(LINK_COMMAND)
    150 
    151 $(OBJECT_DIR)\calculator_test.obj: \
    152 	$(EXAMPLE_SOURCE_DIRECTORY)\calculator_test.c
    153 
    154 $(OBJECT_DIR)\calculator_test-calculator.obj: \
    155 	$(EXAMPLE_SOURCE_DIRECTORY)\calculator.c
    156 	$(CC_COMMAND_UNIT_TEST)
    157 
    158 # Sample code applications.
    159 $(EXECUTABLE_DIR)\allocate_module_test.exe: \
    160 		$(OBJECT_DIR)\allocate_module_test.obj \
    161 		$(OBJECT_DIR)\allocate_module.obj \
    162 		$(LIBRARY_DIR)\cmockery.lib
    163 	$(LINK_COMMAND)
    164 
    165 $(OBJECT_DIR)\allocate_module_test.obj: \
    166 	$(EXAMPLE_SOURCE_DIRECTORY)\allocate_module_test.c
    167 $(OBJECT_DIR)\allocate_module.obj: \
    168 	$(EXAMPLE_SOURCE_DIRECTORY)\allocate_module.c
    169 
    170 $(EXECUTABLE_DIR)\assert_macro_test.exe: \
    171 		$(OBJECT_DIR)\assert_macro_test.obj \
    172 		$(OBJECT_DIR)\assert_macro.obj \
    173 		$(LIBRARY_DIR)\cmockery.lib
    174 	$(LINK_COMMAND)
    175 
    176 $(OBJECT_DIR)\assert_macro_test.obj: \
    177 	$(EXAMPLE_SOURCE_DIRECTORY)\assert_macro_test.c
    178 $(OBJECT_DIR)\assert_macro.obj: $(EXAMPLE_SOURCE_DIRECTORY)\assert_macro.c
    179 
    180 $(EXECUTABLE_DIR)\customer_database_test.exe: \
    181 		$(OBJECT_DIR)\customer_database_test.obj \
    182 		$(OBJECT_DIR)\customer_database.obj \
    183 		$(LIBRARY_DIR)\cmockery.lib
    184 	$(LINK_COMMAND)
    185 
    186 $(OBJECT_DIR)\customer_database_test.obj: \
    187 	$(EXAMPLE_SOURCE_DIRECTORY)\customer_database_test.c
    188 $(OBJECT_DIR)\customer_database.obj: \
    189 	$(EXAMPLE_SOURCE_DIRECTORY)\customer_database.c
    190 
    191 $(EXECUTABLE_DIR)\key_value_test.exe: \
    192 		$(OBJECT_DIR)\key_value_test.obj \
    193 		$(OBJECT_DIR)\key_value.obj \
    194 		$(LIBRARY_DIR)\cmockery.lib
    195 	$(LINK_COMMAND)
    196 
    197 $(OBJECT_DIR)\key_value_test.obj: $(EXAMPLE_SOURCE_DIRECTORY)\key_value_test.c
    198 $(OBJECT_DIR)\key_value.obj: $(EXAMPLE_SOURCE_DIRECTORY)\key_value.c
    199 
    200 $(EXECUTABLE_DIR)\product_database_test.exe: \
    201 		$(OBJECT_DIR)\product_database_test.obj \
    202 		$(OBJECT_DIR)\product_database.obj \
    203 		$(LIBRARY_DIR)\cmockery.lib
    204 	$(LINK_COMMAND)
    205 
    206 $(OBJECT_DIR)\product_database_test.obj: \
    207 	$(EXAMPLE_SOURCE_DIRECTORY)\product_database_test.c
    208 $(OBJECT_DIR)\product_database.obj: \
    209 	$(EXAMPLE_SOURCE_DIRECTORY)\product_database.c
    210 
    211 $(EXECUTABLE_DIR)\run_tests.exe: \
    212 		$(OBJECT_DIR)\run_tests.obj $(LIBRARY_DIR)\cmockery.lib
    213 	$(LINK_COMMAND)
    214 
    215 $(OBJECT_DIR)\run_tests.obj: $(EXAMPLE_SOURCE_DIRECTORY)\run_tests.c
    216 
    217 # Inference rules.
    218 {$(OBJECT_DIR)\}.obj{$(EXECUTABLE_DIR)\}.exe:
    219 	$(LINK_COMMAND)
    220 
    221 {$(OBJECT_DIR)\}.obj{$(LIBRARY_DIR)\}.lib:
    222 	$(LIB_COMMAND)
    223 
    224 {$(LIBRARY_SOURCE_DIRECTORY)\}.c{$(OBJECT_DIR)\}.obj:
    225 	$(CC_COMMAND)
    226 
    227 {$(EXAMPLE_SOURCE_DIRECTORY)\}.c{$(OBJECT_DIR)\}.obj:
    228 	$(CC_COMMAND_UNIT_TEST)
    229