安装CMAKE
1.Centos Linux可使用yum安装CMake。
yum install -y cmake
2.源代码安装
#需要安装gcc
yum install -y gcc automake autoconf libtool gcc-c++ openssl-devel make
#切换到软件目录
/home/linux_soft/other
#解压
tar -zxvf cmake-3.22.1.tar.gz
#切换到解压目录
cd cmake-3.22.1
#编译
./bootstrap
#gmake生成makefile文件
gamke
#安装
make install
3.Window没用安装过,去https://cmake.org/download/下载。
第一个CMAKE
创建cmake项目描述文件
#创建cmake项目描述文件
touch CMakeLists.txt
CMakeLists.txt 的内容
#项目名称
project(demo)
set(src_list main.cpp)
message(STATUS "this is binary dir" ${demo_BINARY_DIR})
message(STATUS "this is source dir" ${demo_SOURCE_DIR})
add_executable(demo ${src_list})
c++代码
#include <iostream>
using namespace std;
int main(){
cout << "hello world " << endl;
return 0;
}
项目结构的CMake项目
目录结构
├── build #编译目录
├── CMakeLists.txt #项目
└── src #源代码目录
├── CMakeLists.txt
└── main.cpp
build目录同级的CMakeLists.txt文件
project(demo)
#指定子源代码目录
add_subdirectory(./src bin)
src目录下得CMakeLists.txt文件
add_executable(demo main.cpp)
项目结构的CMAKE安装项目
安装
-
一种是从源代码编译make install直接安装
-
一种是打包时指定目录安装
- 简单的可以直接指定安装目录:make install DESTDIR=/usr/local
- 复杂一点可以指定目录安装:./configure --prefix=/usr/local
CMakeLists.txt文件
project(demo)
add_subdirectory(./src bin)
#用于安装文档 ,DESTINATION 是安装到/usr/local/share/doc/cmake
INSTALL(FILES 1.txt DESTINATION test/)
#安装脚本,PROGRAMS,安装到/usr/bin目录下
INSTALL(PROGRAMS 1.sh DESTINATION bin)
#安装目录
INSTALL(DIRECTORY doc/ DESTINATION doc/)
#安装执行文件
INSTALL(TARGETS demo RUNTIME DESTINATION bin)
#执行cmake
cmake ..
#或者指定安装目录
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/diy ..
#编译
make
#安装
make install
静态库和动态库
CMakeLists.txt文件
set(lib_src hello.cpp)
#动态库 so 或dll
add_library(hello SHARED ${lib_src})
#静态库 lib或 a
add_library(hello STATIC ${lib_src})
同时生成静态库和动态库
add_library(hello_static STATIC ${lib_src})
#对hello_static的重名为hello
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
#cmake 在构建⼀个新的target 时,会尝试清理掉其他使⽤这个名字的库,因为,在构建 libhello.so 时, 就会清理掉 libhello.a
SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
ADD_LIBRARY(hello SHARED ${lib_src})
SET_TARGET_PROPERTIES(hello PROPERTIES OUTPUT_NAME "hello")
SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
动态库的版本号
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
安装共享库和静态库
#⽂件放到该⽬录下
INSTALL(FILES hello.h DESTINATION include/hello)
#⼆进制,静态库,动态库安装都⽤TARGETS
#ARCHIVE 特指静态库,LIBRARY 特指动态库,RUNTIME 特指可执⾏⽬标⼆进制。
INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
make后头⽂件找不到的问题
INCLUDE_DIRECTORIES(/usr/include/hello)
网友评论