CMake笔记

记录CMake使用的基本场景,来自《CMake Practice》,默认使用外部编译。
main.c

#include<stdio.h>
int main(int argc,char **argv)
{
    printf("Hello World!\n");
    return 0;
}

hello.h

#include<stdio.h>

void func();

hello.c

#include"hello.h"
void func()
{
    printf("Hello World!\n");
}

Demo1-单文件

目录结构

CMakeLists.txt
main.c

CMakeLists.txt

# CMake版本声明
cmake_minimum_required(VERSION 2.8)

# 工程名声明
project(Demo1)

#设置变量名
set(SRC_LIST main.c) #将main.c保存到SRC_LIST变量中

#打印消息
message(STATUS "This is BINARY dir" ${Demo1_BINARY_DIR})
message(STATUS "This is SOURCE dir" ${Demo1_SOURCE_DIR})

# 生成可执行文件
add_executable(Demo1 ${SRC_LIST})

Demo2-生成动静态库,并将结果放到指定位置

目录结构

CMakeLists.txt
src
	- CMakeLists.txt
	- hello.c
	- hello.h

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Demo2)
set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/pack) #build目录下的pack目录中
add_subdirectory(src)

src/CMakeLists.txt

add_library(hello_static STATIC hello.c)
add_library(hello_shared SHARED hello.c)
set_target_properties(hello_static PROPERTIES OUTPUT_NAME "hello")
set_target_properties(hello_shared PROPERTIES OUTPUT_NAME "hello")
set_target_properties(hello_shared PROPERTIES VERSION 1.2 SOVERSION 1)
install(TARGETS hello_static hello_shared
				LIBRARY DESTINATION lib
				ARCHIVE DESTINATION lib)
install(FILES hello.h DESTINATION include)				

Demo3-多目录

目录结构

CMakeLists.txt
src
	- func.c
	- CMakeLists.txt
	- main.c
include
	- hello.h
	- func.h
lib
	- libhello.a

myadd.h

int myadd(int a,int b); //加法

myadd.c

#include"myadd.h"
int myadd(int a, int b)
{
	return a+b;
}

main.c

#include"hello.h"
#include"myadd.h"

int main(int argc,char **argv)
{
	printf("sum:%d\n",myadd(3,4));
	func();
	return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Demo3)

set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR})
add_subdirectory(src)

src/CMakeLists.txt

include_directories(${PROJECT_SOURCE_DIR}/include) #头文件路径
link_directories(${PROJECT_SOURCE_DIR}/lib) #库文件路径
message(STATUS "qiu:" ${PROJECT_SOURCE_DIR})
add_executable(Demo3 main.c myadd.c)
target_link_libraries(Demo3 libhello.a)

message(STATUS "kai" ${CMAKE_INSTALL_PREFIX})
install(TARGETS Demo3 
	RUNTIME DESTINATION bin)

Demo4-带文档,输出打包目录

目录结构

CMakeLists.txt
src
	- func.c
	- CMakeLists.txt
	- main.c
include
	- hello.h
	- func.h
lib
	- libhello.a
doc
	- doc1.txt
	- doc2.txt
README.md
start.sh

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Demo4)

set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/pack)
install(FILES README.md DESTINATION .) #文档
install(DIRECTORY doc DESTINATION .) #目录
install(PROGRAMS start.sh DESTINATION .) #脚本
add_subdirectory(src)

src/CMakeLists.txt

include_directories(${PROJECT_SOURCE_DIR}/include) #头文件路径
link_directories(${PROJECT_SOURCE_DIR}/lib) #库文件路径
add_executable(Demo4 main.c myadd.c)
target_link_libraries(Demo4 libhello.a)

install(TARGETS Demo4
	RUNTIME DESTINATION .)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值