cmake初探

2 篇文章 0 订阅

在学OpenGL的时候遇到问题了:不会用cmake,只能从头学了,下面记下我在clion里学习cmake的记录:

PART_1:由最简单的HelloWorld开始

首先创建c项目,名为cmake_1_helloworld,创建后,可以看到项目结构是这样的:




可以看到clion已经为我生成CMakeLists.txt文件了,看看里面的内容和我的注释:

#cmake最低版本需求,不加入此行会受到警告信息
cmake_minimum_required(VERSION 3.7)
#项目名称
project(cmake_1_helloworld)
#设置变量CMAKE_C_STANDARD99,含义是C的标准,但好像没地方用到这个变量
set(CMAKE_C_STANDARD 99)
#设置变量SOURCE_FILESmain.c,下面会用到
set(SOURCE_FILES main.c)
#SOURCE_FILES里面的全部文件生成应用程序 cmake_1_helloworld (windows下会自动生成cmake_1_helloworld.exe)
add_executable(cmake_1_helloworld ${SOURCE_FILES})

#这两行是我自己加上的,作用是在终端输出工程的源代码路径和二进制文件保存路径 ,这两个变量是cmake中预定义的变量
message(${PROJECT_SOURCE_DIR})
message(${PROJECT_BINARY_DIR})

编译一下,终端输出如下(第3第4行就是我用message命令输出的):

"D:\CLion 2017.1.2\bin\cmake\bin\cmake.exe" --build D:\project_c\p_cmake\cmake_1_helloworld\cmake-build-debug --target cmake_1_helloworld -- -j 8
D:/project_c/p_cmake/cmake_1_helloworld
D:/project_c/p_cmake/cmake_1_helloworld/cmake-build-debug
-- Configuring done
-- Generating done
-- Build files have been written to: D:/project_c/p_cmake/cmake_1_helloworld/cmake-build-debug
[100%] Built target cmake_1_helloworld


PART_2:多个文件的项目

项目结构如下:


cmakeLists.txt(和Part_1差不多,主要就在SOURCE_FILES加多了helloworld.c):

cmake_minimum_required(VERSION 3.7)
project(cmake_2_many_file)

set(CMAKE_C_STANDARD 99)

set(SOURCE_FILES main.c helloworld.c)
add_executable(cmake_2_many_file ${SOURCE_FILES})


PART_3:生成一个静态库,链接该库

cmake_minimum_required(VERSION 3.7)
project(cmake_3_static_lib)

set(CMAKE_C_STANDARD 99)
#这里的源码只有main.cset(SOURCE_FILES main.c)
set(LIB_FILES hello.c)
#生成一个静态库
add_library(hello ${LIB_FILES})
add_executable(cmake_3_static_lib ${SOURCE_FILES})
#连接这个静态库
target_link_libraries(cmake_3_static_lib hello)

PART_4:将源文件放置到不同的目录

现在我想把不同的源代码放在不同的地方,例如这样:


那么顶级的CMakeList.txt可以这样写

cmake_minimum_required(VERSION 3.7)
project(cmake_4_split_src)
set(CMAKE_C_STANDARD 99)

add_subdirectory(src)
add_subdirectory(lib)

add_subdirectory,表示告诉cmake在以下目录里找其他CMakeLists.txt文件


lib下的CMakeList.txt可以这样写,这个不解释

set(LIB_FILES hello.c)
add_library(hello ${LIB_FILES})

src下的CMakeList.txt可以这样写

include_directories(${PROJECT_SOURCE_DIR}/lib)
set(APP_SRC main.c)
add_executable(cmake_4_split_src ${APP_SRC})
target_link_libraries(cmake_4_split_src hello)
include_directories 用来指明头文件所在的路径(但亲测没有这句编译也不会出错且可运行)。

生成出来的目录和文件:




PART_5:将源文件放置到不同的目录

先放效果结构图:


顶级CMakeLists:

cmake_minimum_required(VERSION 3.7)
project(cmake_5_change_output_path)

add_subdirectory(src)
add_subdirectory(lib)

src里的CMakeLists:

link_directories(${PROJECT_BINARY_DIR}/lib)
set(SOURCE_FILES main.c)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
add_executable(cmake_5_change_output_path ${SOURCE_FILES})
target_link_libraries(cmake_5_change_output_path hello)
lib里的 CMakeLists:

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(LIB_FILES hello.c)
add_library(hello ${LIB_FILES})
顶级的和part_5一样,src和lib分别更改了执行文件输出路径和库的输出路径,其余的和part_5相同



PART_6:生成动态库

add_library(hello SHARED ${LIB_FILES})
把STATIC改成SHARED就行了,其他不变








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值