撰寫 cmake 的 CMakeLists.txt

本篇介紹如何撰寫 cmake 的 CMakeLists.txt,

新增 .cmake 到 CMAKE_MODULE_PATH

用來定義自己的 cmake 模組所在的路徑。如果你的工程比較複雜,有可能會自己編寫一些 cmake 模組,這些 cmake 模組是隨你的工程釋出的,為了讓 cmake 在處理 CMakeLists.txt 時找到這些模組,你需要通過 SET 指令,將自己的 cmake 模組路徑設定一下。
比如
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
這時候你就可以通過 INCLUDE 指令來呼叫自己的模組了。

用append在之前的變數裡也可以
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

例如:想要抓取最新的 FindZLIB.cmake,但目前系統使用的 cmake 不支援,可以到這裡下載最新版本。

參考
[1] Kitware/CMake: Mirror of CMake upstream repository
https://github.com/Kitware/CMake
[2] cmake中cmakelists的编写_cmake,cmakelists,c++_Usper-CSDN博客
https://blog.csdn.net/uniqueyyc/article/details/80916779
[3] cmake 学习笔记(三)_1+1=10-CSDN博客
https://blog.csdn.net/dbzhang800/article/details/6329314

cmake 改變編譯完的輸出路徑

在 CMakeLists.txt 設定一下這些變數即可改變輸出路徑

1
2
3
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

也可以不要全部都改變,只指定某個 targets 改變就好

1
2
3
4
5
6
set_target_properties( targets...
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

CMAKE_ARCHIVE_OUTPUT_DIRECTORY 是改變 xxx.lib 的輸出路徑
CMAKE_LIBRARY_OUTPUT_DIRECTORY 是改變 ??????? 的輸出路徑
CMAKE_RUNTIME_OUTPUT_DIRECTORY 是改變 xxx.dll 的輸出路徑
在 Windows 下 設定 CMAKE_RUNTIME_OUTPUT_DIRECTORY 為 build/bin 後用debug編譯完可能會輸出到 build/bin/Debug
不想要 Debug 的路徑可以直接設定 CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG 就不會有,會變成 build/bin
Release 也是,不想要 Release 的路徑可以直接設定 CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE 就不會有了。

參考
c++ - How do I make CMake output into a ‘bin’ dir? - Stack Overflow
https://stackoverflow.com/questions/6594796/how-do-i-make-cmake-output-into-a-bin-dir

相關文章
Windows 編譯 cmake-gui
CMake 專案裡 include .cmake 檔案