cmake中PROJECT_SOURCE_DIR的遐思
https://blog.csdn.net/random_repick/article/details/70045677
刀么克瑟拉莫 2017-04-11 10:23:00
PROJECT_SOURCE_DIR為包含PROJECT()的最近一個CMakeLists.txt文件所在的文件夾。
如以下文件結構:

test/CMakeLists.txt文件內容為
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(test)
ADD_SUBDIRECTORY(src)
test/src/CMakeLists.txt文件內容為
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #PROJECT(main)
在build中執行cmake ..(兩個小數點別丟了)則PROJECT_SOURCE_DIR的值為(parent_path)/test,
取消#PROJECT(main)的注釋,PROJECT_SOURCE_DIR的值為(parent_path)/test/src
=======================================================================
=======================================================================
CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之間的區別
時間 2018-08-24
原文 https://stackoverflow.com/questions/15662497/difference-between-cmake-current-source-dir-and-cmake-current-list-dir
來自維基:
CMAKE_CURRENT_SOURCE_DIR
這是當前處理的CMakeLists.txt所在的目錄
CMAKE_CURRENT_LIST_DIR
(自2.8.3開始)這是當前正在處理的列表文件的目錄.
來自Docs:
CMAKE_CURRENT_SOURCE_DIR:當前正在處理的源目錄的路徑.
這是cmake當前正在處理的源目錄的完整路徑.
CMAKE_CURRENT_LIST_DIR:當前正在處理的列表文件的完整目錄.
當CMake處理項目中的列表文件時,該變量將始終設置為當前正在處理的列表文件(CMAKE_CURRENT_LIST_FILE)所在的目錄.該值具有動態范圍.當CMake開始處理源文件中的命令時,它將此變量設置為此文件所在的目錄.當CMake完成處理來自文件的命令時,它將恢復先前的值.因此,宏或函數內部變量的值是調用調用堆棧上最底部條目的文件的目錄,而不是包含宏或函數定義的文件的目錄.
在什么情況下這些變量會有不同的價值?
變量
CMAKE_CURRENT_SOURCE_DIR
和
CMAKE_CURRENT_LIST_DIR
可以指代由具有
include命令的不同文件包括的CMake列表文件的不同目錄.例如,如果目錄項目中存在CMakeLists.txt並且包含以下指令
include(src/CMakeLists.txt)
然后在處理src/CMakeLists.txt時,CMAKE_CURRENT_LIST_DIR將引用project / src,而CMAKE_CURRENT_SOURCE_DIR仍然指向外部目錄項目.
當您需要找到當前正在處理的CMakeLists.txt文件旁邊的模板文件或批處理腳本等資源文件時,CMAKE_CURRENT_LIST_DIR會派上用場.
==========================================================================
==========================================================================
CMake中的CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR是否相同?
http://www.voidcn.com/article/p-hfpsoipx-btw.html
時間 2018-11-08
原文 https://stackoverflow.com/questions/32028667/are-cmake-source-dir-and-project-source-dir-the-same-in-cmake
This page包含一個很好的摘要,CMake已經為我們定義了變量.我覺得有些變量是一樣的.以CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR為例.它們是相同的,指的是定義頂級CMakeLists.txt的文件夾.所以我的問題是:他們之間有微妙的區別嗎?謝謝.
這些變量之間有差異.
CMAKE_SOURCE_DIR
確實是指
定義了頂級CMakeLists.txt的文件夾.但是,
PROJECT_SOURCE_DIR
是指
包含最近的project()命令的CMakeLists.txt的文件夾.
例如,假設你有一個名為Outer的頂級項目,它包含一個子目錄,其自己的項目叫做Inner.外面的CMakeLists.txt有:
project(Outer)
add_subdirectory(Inner)
和內在的:
然后在這兩個CMakeLists文件中,CMAKE_SOURCE_DIR將引用Outer的源目錄.但是外部PROJECT_SOURCE_DIR也是同一個目錄,而Inner並不是這樣. Inner的PROJECT_SOURCE_DIR是包含其CMakeLists.txt的子目錄.
該差異適用於所有PROJECT_< var> vs CMAKE_< var>變量.