windows cmake 报错 make: *** No targets specified and no makefile found. Stop.

2 篇文章 0 订阅

原因:咱们是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 里,这样的工作同样只需要简单的调用几条命令。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&露从今夜白

长风破浪会有时,直挂云帆济沧海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值