laolang@laolang-PC:~/code/clion/cmakestudy$ ll 总用量 8 -rw-r--r-- 1 laolang laolang 154 1月 23 03:43 CMakeLists.txt -rw-r--r-- 1 laolang laolang 79 1月 23 03:42 main.c laolang@laolang-PC:~/code/clion/cmakestudy$
# cmake 支持的最小版本
cmake_minimum_required(VERSION 3.7)
# 项目名称与语言
project(cmakestudy C)
# 设置语言版本
set(CMAKE_C_STANDARD 99)
# 设置源文件列表
set(SOURCE_FILES main.c)
# 可执行程序
add_executable(cmakestudy ${SOURCE_FILES})
laolang@laolang-PC:~/code/clion/cmakestudy$ cmake . -- The C compiler identification is GNU 6.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/laolang/code/clion/cmakestudy laolang@laolang-PC:~/code/clion/cmakestudy$ ll 总用量 36 -rw-r--r-- 1 laolang laolang 10609 1月 23 03:47 CMakeCache.txt drwxr-xr-x 5 laolang laolang 4096 1月 23 03:47 CMakeFiles -rw-r--r-- 1 laolang laolang 1381 1月 23 03:47 cmake_install.cmake -rw-r--r-- 1 laolang laolang 272 1月 23 03:47 CMakeLists.txt -rw-r--r-- 1 laolang laolang 79 1月 23 03:42 main.c -rw-r--r-- 1 laolang laolang 4805 1月 23 03:47 Makefile laolang@laolang-PC:~/code/clion/cmakestudy$ make Scanning dependencies of target cmakestudy [ 50%] Building C object CMakeFiles/cmakestudy.dir/main.c.o [100%] Linking C executable cmakestudy [100%] Built target cmakestudy laolang@laolang-PC:~/code/clion/cmakestudy$ ll 总用量 48 -rw-r--r-- 1 laolang laolang 10609 1月 23 03:47 CMakeCache.txt drwxr-xr-x 5 laolang laolang 4096 1月 23 03:47 CMakeFiles -rw-r--r-- 1 laolang laolang 1381 1月 23 03:47 cmake_install.cmake -rw-r--r-- 1 laolang laolang 272 1月 23 03:47 CMakeLists.txt -rwxr-xr-x 1 laolang laolang 8632 1月 23 03:47 cmakestudy -rw-r--r-- 1 laolang laolang 79 1月 23 03:42 main.c -rw-r--r-- 1 laolang laolang 4805 1月 23 03:47 Makefile laolang@laolang-PC:~/code/clion/cmakestudy$ ./cmakestudy Hello, World! laolang@laolang-PC:~/code/clion/cmakestudy$
没有 make clean。由于CMakeLists.txt能够执行脚本并经过脚本生成一些临时文件,因此没有办法跟踪这些临时文件究竟是哪些。所以没有办法提供一个可靠的 make disclean 方案ide
指令大小写无关,参数和变量大小写相关ui
laolang@laolang-PC:~/code/clion/cmakestudy$ tree . ├── build ├── CMakeLists.txt └── main.c 1 directory, 2 files laolang@laolang-PC:~/code/clion/cmakestudy$
cmake_minimum_required(VERSION 3.7) project(cmakestudy C) set(CMAKE_C_STANDARD 99) # message 用法 # SEND_ERROR 产生错误,生成过程被跳过 # STATUS 输出前缀哦 -- 的信息 # FATAL_ERROR 当即终止全部 cmake 过程 # 源码文件路径 message(STATUS "源码路径:" ${PROJECT_SOURCE_DIR}) # 二进制文件路径 message(STATUS "二进制文件路径" ${PROJECT_BINARY_DIR}) # 设置源文件列表的另外一种方法 aux_source_directory(. SRC_LIST) add_executable(cmakestudy ${SRC_LIST})
添加源文件的两种方法:spa
例如在clion中,添加源文件其实就是把全部的源文件的名字加到一个SOURCE_LIST的变量中code
可使用aux_source_directory来设置一个目录中的全部源文件blog
laolang@laolang-PC:~/code/clion/cmakestudy$ ll 总用量 12 drwxr-xr-x 2 laolang laolang 4096 1月 23 04:00 build -rw-r--r-- 1 laolang laolang 609 1月 23 04:02 CMakeLists.txt -rw-r--r-- 1 laolang laolang 73 1月 23 03:59 main.c laolang@laolang-PC:~/code/clion/cmakestudy$ cd build/ laolang@laolang-PC:~/code/clion/cmakestudy/build$ cmake .. -- The C compiler identification is GNU 6.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- 源码路径:/home/laolang/code/clion/cmakestudy -- 二进制文件路径/home/laolang/code/clion/cmakestudy/build -- Configuring done -- Generating done -- Build files have been written to: /home/laolang/code/clion/cmakestudy/build laolang@laolang-PC:~/code/clion/cmakestudy/build$ make Scanning dependencies of target cmakestudy [ 50%] Building C object CMakeFiles/cmakestudy.dir/main.c.o [100%] Linking C executable cmakestudy [100%] Built target cmakestudy laolang@laolang-PC:~/code/clion/cmakestudy/build$ ./cmakestudy Hello, World! laolang@laolang-PC:~/code/clion/cmakestudy/build$
laolang@laolang-PC:~/code/clion/cmakestudy$ tree . ├── build ├── CMakeLists.txt └── src ├── CMakeLists.txt └── main.c 2 directories, 3 files laolang@laolang-PC:~/code/clion/cmakestudy$
# cmake 支持的最小版本 cmake_minimum_required(VERSION 3.7) # 项目名称与语言 project(cmakestudy C) # 设置语言版本 set(CMAKE_C_STANDARD 99) # 添加子目录 # add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) # source_dir 源码目录 # binary_dir 二进制目录 # EXCLUDE_FROM_ALL 将这个目录从编译过程当中排除 add_subdirectory(src)
aux_source_directory(. SRC_LIST) # 改变二进制生成目录 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) add_executable(cmakestudy ${SRC_LIST})
laolang@laolang-PC:~/code/clion/cmakestudy$ cd build/ laolang@laolang-PC:~/code/clion/cmakestudy/build$ ll 总用量 0 laolang@laolang-PC:~/code/clion/cmakestudy/build$ cmake .. -- The C compiler identification is GNU 6.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/laolang/code/clion/cmakestudy/build laolang@laolang-PC:~/code/clion/cmakestudy/build$ make Scanning dependencies of target cmakestudy [ 50%] Building C object src/CMakeFiles/cmakestudy.dir/main.c.o [100%] Linking C executable ../bin/cmakestudy [100%] Built target cmakestudy laolang@laolang-PC:~/code/clion/cmakestudy/build$ ./bin/cmakestudy Hello, World! laolang@laolang-PC:~/code/clion/cmakestudy/build$
若是不指定二进制目录,则在构建的时候会把二进制文件与中间文件所有生成在build/src中ci
laolang@laolang-PC:~/code/clion/cmakestudy$ tree . ├── build ├── CMakeLists.txt ├── include │ └── sum.h ├── Makefile └── src ├── CMakeLists.txt ├── main │ ├── CMakeLists.txt │ └── main.c └── sum ├── CMakeLists.txt └── sum.c 5 directories, 8 files laolang@laolang-PC:~/code/clion/cmakestudy$
# cmake 支持的最小版本 cmake_minimum_required(VERSION 3.7) # 项目名称与语言 project(cmakestudy C) # 设置语言版本 set(CMAKE_C_STANDARD 99) # 添加子目录 # add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) # source_dir 源码目录 # binary_dir 二进制目录 # EXCLUDE_FROM_ALL 将这个目录从编译过程当中排除 add_subdirectory(src)
add_subdirectory(main)
add_subdirectory(sum)
aux_source_directory(. SRC_LIST) # 头文件目录 include_directories(${PROJECT_SOURCE_DIR}/include) # 改变二进制生成目录 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) add_executable(cmakestudy ${SRC_LIST}) # 库文件目录 link_directories(${PROJECT_BINARY_DIR}/lib) # 要连接的库文件 target_link_libraries(cmakestudy sum )
#include <stdio.h> #include"../../include/sum.h" int main() { printf("Hello, World!\n"); printf("%d\n",sum(1,2)); return 0; }
aux_source_directory(. SRC_LIST) # 头文件目录 include_directories(${PROJECT_SOURCE_DIR}/include) # 库文件生成目录 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) # 动态库 add_library(sum SHARED ${SRC_LIST}) # 静态库 add_library(sum_static STATIC ${SRC_LIST}) # 静态库的输出名称 set_target_properties(sum_static PROPERTIES OUTPUT_NAME "sum") # 动态库与静态库同事存在 set_target_properties(sum PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(sum_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 指定动态库版本 set_target_properties(sum PROPERTIES VERSION 1.0 SOVERSION 1)
#include"../../include/sum.h" int sum( int a, int b ){ return a + b; }
#ifndef INCLUDE_SUM_H #define INCLUDE_SUM_H int sum( int a, int b ); #endif /* INCLUDE_SUM_H */
all:run # 运行 run:build ./build/bin/cmakestudy # 构建 build:init cd build && cmake .. && make # 从新构建 rebuild:clean build # 删除build目录 clean: rm -rf build # 建立 build 目录 init: if [ ! -d build ]; then mkdir build; fi
laolang@laolang-PC:~/code/clion/cmakestudy$ make if [ ! -d build ]; then mkdir build; fi cd build && cmake .. && make -- The C compiler identification is GNU 6.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/laolang/code/clion/cmakestudy/build make[1]: Entering directory '/home/laolang/code/clion/cmakestudy/build' make[2]: Entering directory '/home/laolang/code/clion/cmakestudy/build' make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' Scanning dependencies of target sum make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' [ 16%] Building C object src/sum/CMakeFiles/sum.dir/sum.c.o [ 33%] Linking C shared library ../../lib/libsum.so make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' [ 33%] Built target sum make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' Scanning dependencies of target cmakestudy make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' [ 50%] Building C object src/main/CMakeFiles/cmakestudy.dir/main.c.o [ 66%] Linking C executable ../../bin/cmakestudy make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' [ 66%] Built target cmakestudy make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' Scanning dependencies of target sum_static make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' make[3]: Entering directory '/home/laolang/code/clion/cmakestudy/build' [ 83%] Building C object src/sum/CMakeFiles/sum_static.dir/sum.c.o [100%] Linking C static library ../../lib/libsum.a make[3]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' [100%] Built target sum_static make[2]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' make[1]: Leaving directory '/home/laolang/code/clion/cmakestudy/build' ./build/bin/cmakestudy Hello, World! 3 laolang@laolang-PC:~/code/clion/cmakestudy$
cygwin不能同事生成get
默认连接静态库源码
引用方式不对,正常来讲应该是把库文件和头文件安装到本地,而后连接安装好的头文件和库文件it