CMAKE例子
hello world
- 最基本CMakeLists文件看起来像是这样:
cmake_minimum_required(VERSION 3.0)
project(Tutorial)
add_executable(Tutorial tutorial.cxx)
tutorial.cxx可以是最简单的hello world程序,如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Hello world!\n");
return 0;
}
- 添加版本号
cmake_minimum_required(VERSION 3.0)
project(Tutorial)
# version
set (Tutorial_VERSION_MAJOR 1)
set (Totorial_VERSION_MINOR 0)
# configure file, pass the version number to source file
configure_file (
${PROJECT_SOURCE_DIR}/TutorialConfig.h.in
${PROJECT_BINARY_DIR}/TutorialConfig.h
)
include_directories(${PROJECT_BINARY_DIR})
add_executable(Tutorial tutorial.cxx)
TutorialConfig.h.in
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
tutorial.cxx
#include <stdio.h>
#include <stdlib.h>
#include "TutorialConfig.h"
int main(int argc, char *argv[])
{
printf("Version:%d.%d\n", Tutorial_VERSION_MAJOR, Tutorial_VERSION_MANOR);
printf("Hello world!\n");
return 0;
}
引入自定义库
目录结构如下
---example
|---------hello_world.cxx
|---------CMakeLists.txt
|---------TutorialConfig.h.in
|---------math
|--------mymath.cxx
|--------CMakeLists.txt
- 主CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(Tutorial)
# version
set (Tutorial_VERSION_MAJOR 1)
set (Totorial_VERSION_MINOR 0)
# configure file, pass the version number to source file
configure_file (
${PROJECT_SOURCE_DIR}/TutorialConfig.h.in
${PROJECT_BINARY_DIR}/TutorialConfig.h
)
include_directories(${PROJECT_BINARY_DIR})
add_subdirectory(math)
add_executable(Tutorial tutorial.cxx)
target_link_libraries(Tutorial mymath)
- math中CMakeList.txt
add_library(mymath mymath.cxx)
- mymath.cxx
int myadd(int a, int b)
{ return a+b; }
- hello_world.cxx
#include <stdio.h>
#include <stdlib.h>
#include "TutorialConfig.h"
extern int myadd(int, int);
int main(int argc, char *argv[])
{
printf("myadd:%d\n", myadd(1, 2));
printf("Version:%d.%d\n", Tutorial_VERSION_MAJOR, Tutorial_VERSION_MANOR);
printf("Hello world!\n");
return 0;
}