. Make
紹介した 、ソースファイルからターゲットファイルへの.c/.cppファイルは、コンパイルのプロセスと呼ばれていますが、プロジェクトは、コンパイルのプロセスでは、必ず最初にコンパイルされる特定のファイルを含む複数のファイルのコンパイルを伴うファイルに存在することはできません、特定のファイルは、コンパイル後にコンパイルされます。ビルドプロセスは、シーケンシャルな関係でファイルのコンパイルを手配することです。
makeはビルドツールで、GNUプロジェクトの一部です。Macでmake -versionと入力すると、makeユーティリティのバージョンが表示されます。
>>
make -version
>>
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin
. Makefile
例として、次の4つのファイルがあります。
>> add.cpp
int add (int num1,int num2) {
return num1 + num2 + 200;
}
>> div.cpp
int div(int num1,int num2) {
return num1 / num2;
}
>> sub.cpp
int sub(int num1,int num2) {
return num1 - num2;
}
>> hello.cpp
#include <stdio.h>
int add(int num1,int num2);
int sub(int num1,int num2);
int div(int num1,int num2);
int main(int argc,char* argcv[]) {
int a = 20;
int b = 10;
printf("%d+%d=%d",a,b,add(a,b));
printf("%d-%d=%d",a,b,sub(a,b));
printf("%d/%d=%d",a,b,div(a,b));
}
hello.cppはadd.cpp、div.cpp、sub.cppに依存しているので、通常のエッジステップに従います:
gcc hello.cpp div.cpp sub.cpp add.cpp -o hello
>> これを分割すると
Make、Makefile、CMake、CMakeLists.txtの関係をまとめると以下のようになる。.o
gcc -c add.cpp -o add.o
gcc -c div.cpp -o div.o
gcc -c sub.cpp -o sub.o
gcc -c hello.cpp -o hello.o
gcc hello.o div.o sub.o add.o -o hello (いいえ -c)
Makeを使うには、Makefileファイルを書き、Makefileファイルをソース・ディレクトリの
hello.out:hello.o sub.o div.o add.o
gcc hello.o sub.o div.o add.o -o hello.out
div.o:div.cpp
gcc -c div.cpp -o div.o
sub.o:sub.cpp
gcc -c sub.cpp -o sub.o
add.o:add.cpp
gcc -c add.cpp -o add.o
hello.o:hello.cpp
gcc -c hello.cpp -o hello.o
makeコマンドを実行すると、makeは自動的にMakefileファイルを見つけて実行します。これにより、手動で一歩一歩ファイルをコンパイルする必要がなくなります。
. CMakeと CMakeLists.txt
Make と Makefile は手動でのビルドプロセスを簡略化しますが、Makefile ファイルを書くのはまだ面倒です。そのため、Makefile ファイルを生成するために CMake ユーティリティが使用され、その生成方法は CMakeLists.txt ファイルで指定されます。
例: CMakeLists.txtを使ったhello.cppのコンパイル
>> hello.cpp
#include <stdio.h>
int main(int argc,char* argcv[]) {
int a = 20;
int b = 10;
printf("%d+%d",a,b);
return 0;
}
>> 同じディレクトリにCMakeListsを書く.txt
PROJECT (HELLO)
SET(SRC_LIST hello.cpp)
MESSAGE(STATUS "this is BINARY dir" ${HELLO_BINDARY_DIR})
MESSAGE(STATUS "this is SOURCE dir" ${HELLO_SOURCE_DIR})
MESSAGE(STATUS "this is PRPOJECT_SOURCE" ${PRPOJECT_SOURCE_DIR})
ADD_EXECUTABLE(hello.out ${SRC_LIST})
>> cmakeを実行する CMakeLists.txt Makefileを生成する
>> makeを実行してhelloをコンパイルする.cpp helloを生成する.o
最終的な製品は次のように生成されます:
全体として、Make、Makefile、CMake、CMakeLists.txtの関係は以下の図にまとめることができます:





