Cmake之文件目录规划与设置

cmake设置生成文件的位置 - 简书

本文主要分析cmake中4个变量的区别:

  1. CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
  2. CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
  3. LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定 CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
  4. CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;

上面就是结论,如果你理解了,下面的实验就不需要看了。如果没有理解,请根据实验进行理解。

linux在程序编译过程中产生的3类有用文件为:.a结尾的静态库文件,.so结尾的动态库文件和可执行文件。下面我们通过一个立在来说明上面4个变量的使用。

构建一个结构如下的文件夹:
.
├── CMakeLists.txt
├── archive
├── fun
│ ├── CMakeLists.txt
│ └── fun.cpp
├── library
├── output
└── runtime
其中 ./CMakeListLists.txt 的内容为:

cmake_minimum_required(VERSION 3.1) 
project(TEST)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/runtime)
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
add_subdirectory(fun)

fun/CMakeLists.txt 的内容为:

cmake_minimum_required(VERSION 3.1) 
project(fun)
add_library(fun fun.cpp)

fun/fun.cpp 的内容为:

int add(int a, int b){return a+b;}
int main(){return 0;}

测试 CMAKE_ARCHIVE_OUTPUT_DIRECTORY

  • 执行 cmake .; make,可以在 archive 下看见产生了静态库文件 libfun.a

  • 如果将 ./CMakeLists.txt 中的第3行注释掉,执行 make,可以发现在 path 下产生了 libfun.a

  • 如果将 ./CMakeLists.txt 中的第3行、第6行都注释掉,执行 make,可以发现在 fun 下产生了 libfun.a

测试 CMAKE_LIBRARY_OUTPUT_DIRECTORY

  • 先将 fun/CMakeLists.txt 的第三行修改为:add_library(fun SHARED fun.cpp)
  • 执行 make,可以在 library 目录下看到 libfun.so 文件 (如果是mac os系统,则可以看到 libfun.dylib)
  • 如果将 ./CMakeLists.txt 中的第4行注释掉,执行 make,可以发现在 path 下产生了 libfun.so 文件;
  • 如果将 ./CMakeLists.txt 中的第4行、第6行都注释掉,执行 make,可以发现在 fun 下产生了 libfun.so 文件;

测试 CMAKE_RUNTIME_OUTPUT_DIRECTORY

  • 先将 fun/CMakeLists.txt 的第三行修改为:add_executable(exe_file fun.cpp)
  • 执行 make,在 runtime 下创建了可执行文件 exe_file
  • ./CMakeLists.txt 中的第5行注释掉,执行 makeexe_filefun 文件夹下创建。

通过上面的3个实验应该就可以理解4个变量的作用了。



作者:FoolishFlyFox
链接:https://www.jianshu.com/p/599550afd28d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/u013590327/article/details/123045977
今日推荐