2012-03-21 20 views
5

Tôi muốn lấy biến đã được đặt thành kết hợp các phần tử đường dẫn (có khả năng cả tuyệt đối lẫn tương đối) và nhận đường dẫn tuyệt đối từ nó. Một cái gì đó giống như những gì boost::filesystem::system_complete() hiện trong C + +. Ví dụ, tôi có một cái gì đó như:CMake: Lấy đại diện hoàn chỉnh của đường dẫn trừ đi các phần tử tương đối

set(EXTERNAL_LIB_DIR "${CMAKE_SOURCE_DIR}/../external" CACHE PATH "Location of externals") 

mà hoạt động nhưng trong UI đó là một chút xấu xí, vì nó có thể kết thúc trông như C:/dev/repo/tool/../external. Tôi tự hỏi nếu có một lệnh xây dựng CMake để biến nó thành C:/dev/repo/external trước khi tôi đi và viết một macro để làm điều đó. find_path loại điều này, nhưng nó đòi hỏi rằng con đường đã tồn tại và một cái gì đó đáng để tìm kiếm ở đó. Tôi muốn nó làm việc cho dù con đường tồn tại hay không (tôi có thể sử dụng nó cho một mặc định CMAKE_INSTALL_PREFIX ghi đè, ví dụ).

Trả lời

14

Bạn có thể sử dụng:

get_filename_component(NEW_VAR ${EXTERNAL_LIB_DIR} REALPATH) 
+0

Perfect, cảm ơn bạn. –

Các vấn đề liên quan