Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КонстрПЗ_ПI_ЛР2014_ч2

.pdf
Скачиваний:
4
Добавлен:
07.02.2016
Размер:
2.18 Mб
Скачать

11

, make-*

(COMPILER_FILE_SET, LIQKER_FILE_SET, BUILD_PATH, PRODUCT_QAME);

, , -

0;

? * K .

< , * build.cmd

:

@echo off

setlocal enabledelayedexpansion

call :check_environment

rem Project configuration set SRC_PATH=./src

set BUILD_PATH=./build set CONFIG_PATH=./config set PRODUCT_NAME=myAPI set ARGS_FILE=args.mak

rem LIB W-/ 3.G2G**+6 /1.QTG*и6, X 1/-/./0 n.+*и-,6 3Q-] 1 1+-+5/PQ, X 1/-/./2 5и*1G. \QSG- и,1+-]

rem \и\5и/-G1и S56 .+Y.GbG*и6 ,X6YRX+*и6 set LIB="%CPP_BUILDER_HOME%/static_data"

set PATH=%PATH%;%CPP_BUILDER_HOME%/dynamic_data

rem Z/SSG.TиX+G2RG +.PQ2G*-R Y+3Q,1+. set DLL_DEBUG_ARG=dll_debug

set DLL_RELEASE_ARG=dll_release set HELP_ARG=help

set DEFAULT_ARG=%DLL_DEBUG_ARG%

rem Z./XG.6G2, \R5/ 5и Y+S+* +.PQ2G*- 3.и Y+3Q,1G. h,5и *G-, \QSG2 XR3/5*6-] DEFAULT_ARG.

set CURRENT_ARG=%1

if "" == "%CURRENT_ARG%" (

set CURRENT_ARG=!DEFAULT_ARG!

)

rem g\.+\/-1+ +.PQ2G*-/X Y+3Q,1+.

if %DLL_DEBUG_ARG% equ %CURRENT_ARG% ( call :clean

call :build_makefile_args call :build_dll_debug

12

) else if "%DLL_RELEASE_ARG%" equ "%CURRENT_ARG%" ( call :clean

call :build_makefile_args call :build_dll_release

) else if "%HELP_ARG%" equ "%CURRENT_ARG%" ( call :usage

) else (

echo Argument %CURRENT_ARG% is not supported. call :usage

)

exit

rem -------------------------------------------------------

:check_environment

if "" == "%CPP_BUILDER_HOME%" (

echo CPP_BUILDER_HOME not defined. Exiting...

exit

)

exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:clean

rmdir /Q /S "%BUILD_PATH%" 2>nul mkdir "%BUILD_PATH%"

exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:build_makefile_args

call :clean_makefile_args call :build_compiler_args call :build_linker_args

exit /b %ERRORLEVEL% rem ------------------------------------

-------------------

rem -------------------------------------------------------

:clean_makefile_args

del "%CONFIG_PATH%\%ARGS_FILE%" 2>nul exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:build_compiler_args

for /R "%SRC_PATH%" %%i in ("*.cpp") do ( set CURRENT_ARG=%%~dpi

13

rem vG*6G2 .+,bи.G*иG *+ obj. set TEMP=%%~nxi

set TEMP=!TEMP:cpp=obj!

set CURRENT_ARG=!CURRENT_ARG!!TEMP!

rem w/YS+G2 X %CONFIG_PATH% N+05 , и2G*G2 %ARGS_FILE% , rem ,/SG.Tи2R2 XиS+:

rem COMPILER_FILE_SET=./first_dir/first.cpp\

rem

./first_dir/second_dir/second.cpp\

rem

etc

if not exist %CONFIG_PATH%/%ARGS_FILE% ( echo

COMPILER_FILE_SET="!CURRENT_ARG!"\>"%CONFIG_PATH%/%ARGS_FILE%

"

) else if "" equ "!LAST_COMPILER_ARG!" ( set LAST_COMPILER_ARG=!CURRENT_ARG!

) else ( echo

"!CURRENT_ARG!"\>>"%CONFIG_PATH%/%ARGS_FILE%"

)

)

if "" neq "%LAST_COMPILER_ARG%" ( echo

"%LAST_COMPILER_ARG%">>"%CONFIG_PATH%/%ARGS_FILE%"

)

exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:build_linker_args

for /R "%SRC_PATH%" %%i in ("*.cpp") do ( rem vG*6G2 .+,bи.G*иG *+ obj.

set TEMP=%%~nxi

set TEMP=!TEMP:cpp=obj!

set CURRENT_ARG=%BUILD_PATH%/!TEMP!

rem a/3и,RX+G2 X %ARGS_FILE% +.PQ2G*-R 5и1G.+. if "" equ "!LINKER_FILE_SET_FLAG!" (

set LINKER_FILE_SET_FLAG=TRUE echo

LINKER_FILE_SET="!CURRENT_ARG!"\>>"%CONFIG_PATH%/%ARGS_FILE%" ) else if "" equ "!LAST_LINKER_ARG!" (

set LAST_LINKER_ARG=!CURRENT_ARG! ) else (

14

echo "!CURRENT_ARG!"\>>"%CONFIG_PATH%/%ARGS_FILE%"

)

)

if "" neq "%LAST_LINKER_ARG%" ( echo

"%LAST_LINKER_ARG%">>"%CONFIG_PATH%/%ARGS_FILE%"

)

exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:build_dll_debug

echo Build started...

"%CPP_BUILDER_HOME%/bin/nmake" /nologo /F "%CONFIG_PATH%/dll_debug.mak" && echo Build SUCCESSFUL && exit /b %ERRORLEVEL%

echo Build FAILED exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:build_dll_release

echo Build started...

"%CPP_BUILDER_HOME%/bin/nmake" /nologo /F "%CONFIG_PATH%/dll_release.mak" && echo Build SUCCESSFUL && exit /b %ERRORLEVEL%

echo Build FAILED exit /b %ERRORLEVEL%

rem -------------------------------------------------------

rem -------------------------------------------------------

:usage

echo "Usage: build.cmd [%DLL_DEBUG_ARG% | %DLL_RELEASE_ARG%]. Default argument is %DEFAULT_ARG%" exit /b %ERRORLEVEL%

rem -------------------------------------------------------

endlocal

1.2.5 CMake

A 0

, make Unix nmake

15

Microsoft. ; *

K . , 0

Mictosoft Visual Studio ' 0

*, i

K , e 0

Build. 4 , i 0

*

K .

0 ,

'.

1. @ e ', i 0 ' -

.

2. ? make- *.

3. &' -

e *.

A e -

: Automake, Cmake, Scons. ?

.

K Cmake, ,

, ' * , - e K .

? Cmake 0K , e K

* make-* *. z '

Microsoft Visual Studio, Nmake makefile, Xcode

Macos, Unix makefile, Watcom makefile, Eclipse Codeblocks.

8 Cmake K Cmakelists.txt

, Cmake. @ e

cmake Cmakelists.txt

' , '

i , makefile, ' , -

e (make, nmake, wmake). '

' , i , e 0

G .

A Cmake-*.

1 cmake_minimum_required (VERSION 2.6) 2

3 set (PROJECT hello_world)

16

4

5 project (${PROJECT})

6

7 set (HEADERS

8 hello.h)

9

10 set (SOURCES

11hello.cpp

12main.cpp)

13

14 add_executable (${PROJECT} ${HEADERS} ${SOURCES})

0 .

1.e Cmake, i e *.

2.K PROJECT, K

hello_world – e .

3.& i ' . / ${2'x_2;;5u} K , ,

hello_world.

4., i

*, .

5.2 *

, PROJECT, * , -

0 HEADERS SOURCES.

< e, ' K Cmake, e -

, -

*.

' ' *,

add_executable, K

add_library. -

,

SHARED :

add_library (${PROJECT} SHARED ${HEADERS} ${SOURCES})

& 0 ' e

Cmakelists.txt :

1 include_directories (../)

2 add_subdirectory (../Vvƒ_„V„…Vgch^V/build

3bin/Vvƒ_„V„…Vgch^V)

target_link_libraries (${PROJECT} Vvƒ_„V„…Vgch^V)

17

& e , i e (

), e -

*, i 0 0.

Cmake *

build , -

0 ./bin/ 'm_P P.

< *

add_executable K, i - 0 0.

' , ' e, i ' 0 , 0 ' -:

1 cmake_minimum_required (VERSION 2.6) 2

3 set (PROJECT Vvƒ_Z†gh^c‡)

4

5 project (${PROJECT})

6

7 include_directories (../)

8

 

9 set (LIBRARIES

Vvƒ_„V„…Vgch^V_1

10

11

Vvƒ_„V„…Vgch^V_2)

12

13 foreach (LIBRARY ${LIBRARIES})

14add_subdirectory (../${LIBRARY}/build

15bin/${LIBRARY})

16endforeach ()

17

 

18 set (HEADERS

../f‡ˆg…gdg‰Š‹h_Œ‡•…‹)

19

20 set (SOURCES

../Œ‡•…‹_w_†h‡…Vf‡ŽVh•)

21

22

 

23 add_executable (${PROJECT} ${HEADERS} ${SOURCES}) 24

target_link_libraries (${PROJECT} ${LIBRARIES})

? * Cmake . 5 -

:

18

e

;

Cmake 0 '-

;

Cmake e

;

Cmake 0 '.

1.3 %. Z .

1.3.15 i

.

1.3.2> , i K

(header-*, *.h), (*.cpp)

, i i K 0 * int main() (*.cpp). & K 55&. < ' * ' , -

e, “5K-K

1.3.3? make-* e -

nmake. make-* K 0 , -

, * -

nmake e , ’ *-

.

1.3.4& e ' nmake, -

, ' *, i 00

, ' e .

1.3.5> bat-*, i K

nmake , i 0 ( -1.3.5 K , i ' 0

).

1.3.6? * CMake e -

cmake. * K 0 , i

0 K 0 , K 0-

* , i K 0

0. & e ' cmake.

1.3.7& -

.

1.3.85* .

19

1.4 1$ !%$

1.4.1< .

1.4.2, i K C++.

1.4.3/ : cpp-* ( –

*: ) h-* ( *: ).

1.4.4mak-*: ' -

release- debug- .

1.4.5* .

1.4.6> -

.

1.4.7* CMakeList.txt.

1.4.8> cmake

.

1.4.9@, i ,

' ' 0

.

1.5 /^$ Z

1.5.1x @ K?

1.5.2& .

1.5.3A '

make nmake, .

1.5.4; e 0 nmake.

1.5.55 e * make-*.

1.5.6x nmake @ K?

1.5.7ƒ mamfile?

1.5.85 e * -

?

1.5.9x 0 K ?

1.5.10x i, i -

IDE?

1.5.11x K ?

1.5.12& CMake, automake, SCons.

20

1.5.135 e i *

CMake?

1.5.14x 0K CMake?

1.5.155 e 0 CMake?

1.5.16x , i

warinings debug?

1.5.17;, , ,

?

1.5.18ƒ “out-of-source”?

1.5.19x '

CMake?

1.5.20x ' -

i?