原因:咱们是windows系统,默认不是生成makefile文件,而是MSVC的工程文件,想要makefile要指定编译器和编译选项为Unix Makefiles
cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles"
make命令找不到就搜MinGW64,下载后g++,gcc,gfortran,make都可以通过mingw-get 命令获取,或者mingw的gui获取;
cmake:
官网:www.cmake.org
优点:
1、开源代码,使用类BSD许可发布。
2、跨平台,并可以生成native编译配置文件,在linux/Unix平台,生成makefile,在苹果平台可以生成Xcode,在windows平台,可以生成MSVC的工程文件。
3、能够管理大型项目。
4、简化编译构建过程和编译过程。cmake的工具链:cmake+make。
5、高效率,因为cmake在工具链中没有libtool。
6、可扩展,可以为cmake编写特定功能的模块,扩展cmake功能。
缺点:
1、cmake只是看起来比较简单,使用并不简单;
2、每个项目使用一个CMakeLists.txt(每个目录一个),使用的是cmake语法。
3、cmake跟已有体系配合不是特别的理想,比如pkgconfig。
下载:centos7----yum -y install cmake
#cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles"
cmake_minimum_required(VERSION 3.10)
# set the project name
project(cmaketest1)
#查找当前日录下的所有源文件
#并将名称保存到DIR SRCS变量
aux source directory(. DIR_SRCS)
#指定生成目标
add executable(Demo ${DIR_SRCS})
#cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles"
cmake_minimum_required(VERSION 3.10)
# set the project name
project(cmaketest1)
#查找当前日录下的所有源文件
#并将名称保存到DIR SRCS变量
aux_source directory(. DIR_SRCS)
add_subdirectory(math)
#指定生成目标
add_executable(Demo ${DIR_SRCS})
target_link_libraries(Demo mathFuc)
---
aux_source_directory(. DIR_SRCS)
add_library(mathFuc ${DIR_SRCS})
---
----------------------------------------------------------------
#CMake最低版本号要求
cmake_minimum_required (VERSION 2.8)
#项目信息
project (Demo4)
#加入一个配置头文件,用于处理CMake对源码的设置
configure_file{
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
}
#是否使用自己的MathFunctions库
option (USE_MYMATH
"Use provided math implementation"ON)
#是否加入MathFunctions库
if (USE_MYMATH)
include_directories ("${PROJECT_SOURCE_DIR}/math")
add_subdirectory (math)
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
#查找当前目录下的所有源文件
#并将名称保存到DIR SRCS变量
aux_source_directory(.DIR_SRCS)
#指定生成目标
add_executable(Demo ${DIR_SRCS})
target_link_libraries(Demo ${EXTRA_LIBS})
---
然后在main.cc里面加上,让其根据 USE_MYMATH 的预定义值来决定是否调用标准库还是 MathFunctions 库:
#include "config.h"
#ifdef USE_MYMATH
#include "math/MathFunctions.h"
#else
#include "Math.h"
#endif
//cpp函数里面可以这样写:
//#ifdef USE MYMATH
// printf("Now we use our own Math library.\n");
// double result power(base,exponent);
//#else
// printf("Now we use the standard library.\n");
// double result pow(base,exponent);
//#endif
---
编写 config.h.in 文件
上面的程序值得注意的是第2行,这里引用了一个 config.h 文件,这个文件预定义了 USE_MYMATH 的值。
但我们并不直接编写这个文件,为了方便从 CMakeLists.txt 中导入配置,我们编写一个 config.h.in 文件,内容如下:
#cmakedefine USE_MYMATH
---
可以使用 cmake -i 命令,该命令会提供一个会话式的交互式配置界面
我们可以试试分别将 USE_MYMATH 设为 ON 和 OFF 得到的结果:
USE_MYMATH 为 ON/OFF
CMake 也可以指定安装规则,以及添加测试。这两个功能分别可以通过在产生 Makefile 后使用 make install 和 make test 来执行。
在以前的 GNU Makefile 里,你可能需要为此编写 install 和 test 两个伪目标和相应的规则,但在 CMake 里,这样的工作同样只需要简单的调用几条命令。