2015-12-15 100 views
2

所以我有:CMake - 如何獲取目錄名稱中的第二個最後?

get_filename_component(a_dir ${some_file} PATH) 
get_filename_component(a_last_dir ${a_dir} NAME) 

在這a_last_dir應該返回我的目錄和a_dir的最低水平應該回到我的完整目錄。

無論如何,我可以使a_second_last_dir可能?要返回完整目錄的第二低級別?

+0

通過追加'..'?例如。 'get_filename_component(a_second_last_dir「/some/dir/sub/../ ..」ABSOLUTE)' – Florian

+0

我沒有可用的完整目錄來添加'..' ... –

+0

您可以舉一個目錄名稱的例子以及你想要提取什麼部分?我們在談論像[這裏](http://stackoverflow.com/questions/28348309/in-python-how-should-one-extract-the-second-last-directory-name-in-a-path) ? CMake的['string()'](https://cmake.org/cmake/help/v3.4/command/string.html)命令也允許很多事情。 – Florian

回答

6

談到我的意見爲答案

您可以通過附加../..使用get_filename_component()

我理解你目前的解決方案是這樣的:

cmake_minimum_required(VERSION 2.8) 

project(SecondLastDirName) 

set(some_file "some/dir/sub/some_file.h") 

get_filename_component(a_dir "${some_file}" PATH) 
get_filename_component(a_last_dir "${a_dir}" NAME) 

get_filename_component(a_second_dir "${a_dir}" PATH) 
get_filename_component(a_second_last_dir "${a_second_dir}" NAME) 

message("a_second_last_dir = ${a_second_last_dir}") 

其中給出a_second_last_dir = dir作爲輸出。

你可以得到相同的輸出用:

get_filename_component(a_second_dir "${some_file}/../.." ABSOLUTE) 
get_filename_component(a_second_last_dir "${a_second_dir}" NAME) 

message("a_second_last_dir = ${a_second_last_dir}") 

中間a_second_dir路徑可能是無效/非現有路徑(因爲CMAKE_CURRENT_SOURCE_DIR前綴),但我認爲這並不重要位置。

如果您希望它是一個正確的絕對路徑,您應該自己在正確的基本目錄前添加前綴(或參閱CMake 3.4,其中介紹BASE_DIR選項爲get_filename_component(... ABSOLUTE))。

相關問題