在 CMakeLists.txt 中加入以下代码, 可以自动判断系统编译器是否支持c++11标准:
|
include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() |
一、 基本使用
安装:下载二进制包后可直接解压使用
从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败
使用:cmake dir_path,生成工程文件或makefile文件
二、 概念
out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;
三、 基本结构
1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;
2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录
3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)
四、 语法
1. #注释
继续阅读 »
第七根弦
2016.08.29
cmake, Visual Studio
原因
我们的跨平台项目使用cmake来管理的,但是windows下的小伙伴发现在visual studio上头文件没有加载进来,于是手工加载,事情过去了。然后,有一天我修改了CMakeLists.txt文件,visual studio居然自动去重新生成了项目,然后头文件就没有了。哭吧~~~~
解决方法
source_group可以将文件分目录来显示在IDE中。
所以,修改了一下base.cmake文件让所有的项目都能检索出头文件并显示在include文件夹中。
|
file(GLOB_RECURSE CURRENT_HEADERS *.h *.hpp) source_group("Include" FILES ${CURRENT_HEADERS}) add_executable(${MODULE_NAME} ${SOURCES} ${CURRENT_HEADERS}) |
重新生成windows项目,头文件自动出现了,win下的小伙伴们幸福了。
vim、emacs党徒直接无视~~~
无论生活还是工作上,做过的事,需要总结下。
接触cmake,一般都会看一本书 <<cmake 实践>>. 这是cmake的入门书。我就不多说了。
下面说一下我对部分cmake命令的使用与理解,不正确的,请大家指点,谢谢!
继续阅读 »
之前写过一篇<探讨CMake中关于RPATH的使用>,只要针对的方面是在编译生成之后(不包括安装的make install)如何去除RPATH的问题。今天给大家主要介绍一下如何让CMake在用install命令之后如何保持RPATH。
继续阅读 »
最近研究CMake,发现CMake对于RPATH的管理也非常人性化。官方说法是当动态库的编译也和执行档在同级目录下的时候,CMake会自动给执行档加入适当的RPATH.具体可以通过readelf -d executable来查看相关的RPATH路径。所以有的时候用QMake编译之后还得手动加一把LD_LIBRARY_PATH,而用CMake编译之后,直接执行执行档就可以了。
继续阅读 »
1、在不同的平台编译的时候,会用到一些系统内置的变量,比如操作系统名称,版本号之类:
CMAKE_SYSTEM:系統全名,如 “Linux-2.4.22″,”FreeBSD-5.4-RELEASE” 或 “Windows 5.1”
CMAKE_SYSTEM_NAME:系統名称,如 “Linux”, “FreeBSD” or “Windows”,注意大小写
CMAKE_SYSTEM_VERSION:只显示系统全名中的版本部分
CMAKE_SYSTEM_PROCESSOR:CPU名称
继续阅读 »
FIND_PACKAGE
每一个模块都会产生如下变量
_FOUND
_INCLUDE_DIR
_LIBRARY or _LIBRARIES
如果_FOUND为真,把_INCLUDE_DIR加入到INCLUDE_DIRECTORIES中,_LIBRARY加入到TARGET_LINK_LIBRARIES中。
继续阅读 »
一、基本指令:
INCLUDE_DIRECTORIES(${includedir}) #-I。
LINK_DIRECTORIES(${libdir}) #-L
TARGET_LINK_LIBRARIES(helloworld ${linkflags}) #-l
ADD_DEFINITIONS(${cflags}) #-D
继续阅读 »
近期评论