cmake初探
来源:互联网 发布:w7怎么添加网络打印机 编辑:程序博客网 时间:2024/06/03 16:12
在学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_STANDARD为99,含义是C的标准,但好像没地方用到这个变量set(CMAKE_C_STANDARD 99)#设置变量SOURCE_FILES为main.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.c了set(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就行了,其他不变
- 初探cmake
- cmake初探
- Android Studio NDK 构建工具 CMake初探
- Android Studio使用CMake编译JNI初探
- 【slam初探】安装opencv中遇到的问题(cmake)
- cmake
- cMAKE
- cmake
- CMake
- Cmake
- cmake
- cmake
- CMake
- cmake
- CMake
- CMake
- CMake
- cmake
- Linux学习高级篇(四)
- 知道mysql的索引吗?
- Linux学习高级篇(六)
- codeforces 847J Students Initiation 网络流+二份答案
- leetcode Merge Sorted Array 合并有序数组
- cmake初探
- linux系统安装pip,numpy,matplotlib,scipy,tensorflow命令
- tomcat启动容器失败报error in opening zip file错误
- 值得学习的C/C++开源项目
- 最简单的 RabbitMQ 监控方法
- Linux学习高级篇(五)
- 谈谈我对懒加载的一点看法 | Objective-C
- 自理解Https原理:证书传递,握手信息传递,数据加密解密的分析。
- Android RecoverSystem 类