「日记」CMakeLists使用笔记
2019-3-3 15:16:1 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

「日记」CMakeLists使用笔记
by anhkgg
2019年3月3日

最近用了一下cmake,虽然还不熟练,但是感觉比Makefile更简单,并且是跨平台的。

这里大概总结一下常用语法。

首先,cmake命令可以全大写或者全小写。

//test.cpp
#include <stdio.h>
int main()
{
printf("hello CMakeLists\n");
return 0;
}

编写CMakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (test)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(test ${DIR_SRCS})

编译

mkdir build
cd build
cmake ..
make
//testlib.cpp
int add(int a, int b)
{
return a+b;
}
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (testlib)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_library(testlib STATIC ${DIR_SRCS})

➜  build make
Scanning dependencies of target testlib
[ 50%] Building CXX object CMakeFiles/testlib.dir/testlib.cpp.o
[100%] Linking CXX static library libtestlib.a
[100%] Built target testlib

链接静态库

//test.cpp
#include <stdio.h>
int add(int a, int b);
int main()
{
printf("1 + 2 = %d\n", add(1, 2));
return 0;
}
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (test)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(test ${DIR_SRCS})

find_library(
TESTLIB testlib
PATHS ./build)

message(${TESTLIB})

target_link_libraries (test ${TESTLIB})

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (testlib)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_library(testlib SHARED ${DIR_SRCS})

[ 33%] Building CXX object CMakeFiles/testlib.dir/test.cpp.o
[ 66%] Building CXX object CMakeFiles/testlib.dir/testlib.cpp.o
[100%] Linking CXX shared library libtestlib.so
[100%] Built target testlib
# 指定 编译目标 的安装路径
install (TARGETS test DESTINATION bin)
make install
include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数

>> include_directories (${HELLO_SOURCE_DIR}/Hello) #增加Hello为include目录

link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数

>> link_directories (${HELLO_BINARY_DIR}/Hello) #增加Hello为link目录

add_subdirectory:包含子目录

>> add_subdirectory (Hello)

add_executable:编译可执行程序,指定编译,好像也可以添加.o文件

>> add_executable (helloDemo demo.cxx demo_b.cxx) #将cxx编译成可执行文件——
add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....

link_libraries( lib1 lib2 ...): All targets link with the same set of libs

set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
SET(TEST_MATH
${DIR_SRCS}
)

https://www.jianshu.com/p/5a63414f0691
https://www.cnblogs.com/cv-pr/p/6206921.html
https://www.cnblogs.com/lidabo/p/7359422.html
https://www.hahack.com/codes/cmake/


文章来源: https://mp.weixin.qq.com/s?__biz=MzU4NjY5ODM3Nw==&mid=2247483782&idx=1&sn=6c4a1edd0cfe9c8d69366cca29295864&chksm=fdf61a60ca8193767a2735f51fc6134bb1284405df6cf9c05fea3a6acb6f1e42b2a4c196579e&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh