Sự khác biệt giữa CMAKE_CURRENT_SOURCE_DIR và CMAKE_CURRENT_LIST_DIR


105

Từ Wiki:

CMAKE_CURRENT_SOURCE_DIR đây là thư mục chứa CMakeLists.txt hiện đang được xử lý nằm trong

CMAKE_CURRENT_LIST_DIR (kể từ 2.8.3) đây là thư mục của tệp danh sách hiện đang được xử lý.

Từ Tài liệu:

CMAKE_CURRENT_SOURCE_DIR: Đường dẫn đến thư mục nguồn hiện đang được xử lý. Đây là đường dẫn đầy đủ đến thư mục nguồn hiện đang được cmake xử lý.

CMAKE_CURRENT_LIST_DIR: Thư mục đầy đủ của tệp danh sách hiện đang được xử lý. Khi CMake xử lý các tệp danh sách trong dự án của bạn, biến này sẽ luôn được đặt thành thư mục chứa tệp danh sách hiện đang được xử lý (CMAKE_CURRENT_LIST_FILE). Giá trị có phạm vi động. Khi CMake bắt đầu xử lý các lệnh trong một tệp nguồn, nó sẽ đặt biến này vào thư mục chứa tệp này. Khi CMake xử lý xong các lệnh từ tệp, nó sẽ khôi phục giá trị trước đó. Do đó, giá trị của biến bên trong macro hoặc hàm là thư mục của tệp gọi mục nhập dưới cùng trên ngăn xếp lệnh gọi, không phải là thư mục của tệp chứa định nghĩa macro hoặc hàm.

Trong những trường hợp nào các biến này sẽ giữ các giá trị khác nhau?


10
Và cũng là chúng khác nhau như thế nào từ đơn giản và tốt đẹp ./?
kyb

Câu trả lời:


138

Các biến CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_LIST_DIRcó thể tham chiếu đến các thư mục khác nhau cho tệp danh sách CMake được bao gồm bởi tệp khác bằng lệnh include . Ví dụ: nếu a CMakeLists.txtcó trong thư mục projectvà chứa lệnh sau

include(src/CMakeLists.txt)

thì while src/CMakeLists.txtđang được xử lý CMAKE_CURRENT_LIST_DIRsẽ tham chiếu đến project/srctrong khi CMAKE_CURRENT_SOURCE_DIRvẫn trỏ đến thư mục bên ngoài project.

CMAKE_CURRENT_LIST_DIRrất hữu ích khi bạn cần định vị các tệp tài nguyên như tệp mẫu hoặc tập lệnh lô nằm bên cạnh CMakeLists.txttệp hiện đang được xử lý.


42
+1. Tôi sẽ chỉ thêm CMAKE_CURRENT_LIST_DIRnhững thay đổi đó với mọi tệp bạn include(); nó không cần phải được gọi CMakeLists.txt.
Angew không còn tự hào về SO

2
Thảo luận tốt ở đây về cách sử dụng hiệu quả CMAKE_CURRENT_LIST_DIRinclude(...)trong các dự án của bạn.
jmcarter9t

1
Dễ bị nhầm lẫn vì CMAKE_CURRENT_SOURCE_DIRgiống CMAKE_SOURCE_DIRvới hàm ý của tài liệu hơn.
Malachi

Và với add_subdirectory()? Cả hai biến sẽ trỏ đến thư mục?
einpoklum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.