2016-12-11 48 views
2

我正在嘗試爲OpenCV項目創建一個makefile。模板看起來是這樣的:從文件夾名稱獲取makefile參數

cmake_minimum_required(VERSION 2.8) 
project(DisplayImage) 
find_package(OpenCV REQUIRED) 
add_executable(DisplayImage DisplayImage.cpp) 
target_link_libraries(DisplayImage ${OpenCV_LIBS}) 

有什麼辦法來代替硬編碼字符串DisplayImage與文件夾的名字嗎?我的目標是將每個項目放在一個文件夾中,然後放入makefile。

+0

只需編寫一個生成該CMakeLists.txt文件的腳本。這將使它既方便,同時明確名稱(我更喜歡自己)。 –

回答

0

您可以使用cmake的方法:get_filename_component,提取父目錄,並把它。無論您需要:

. 
├── build 
├── CMakeLists.txt 
├── SubProjectA 
│   ├── CMakeLists.txt 
│   └── SubProjectA.cpp 
└── SubProjectB 
    ├── CMakeLists.txt 
    └── SubProjectB.cpp 

具有以下內容:

cmake_minimum_required(VERSION 2.8) 

get_filename_component(PARENT_DIR ${CMAKE_SOURCE_DIR} NAME) 
project(${PARENT_DIR}) 

find_package(OpenCV REQUIRED) 

# If you want to change the executable name as well 
add_executable(${PARENT_DIR} DisplayImage.cpp) 
target_link_libraries(${PARENT_DIR} ${OpenCV_LIBS}) 
+0

我會不得不這樣做來更改可執行文件的名稱:'add_executable($ {PARENT_DIR} $ {PARENT_DIR} .cpp)'' – Rilcon42

0

每個子項目創建CMakeLists.txt

cmake_minimum_required (VERSION 2.6) 

get_filename_component(PROJECT_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) 
project("${PROJECT_NAME}") 

find_package(OpenCV REQUIRED) 

set(PROJECT_INCLUDE_DIR "${PROJECT_SOURCE_DIR}") 
set(PROJECT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 
set(SUB_PROJECT_SRC "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.cpp") 
add_executable("${PROJECT_NAME}" ${SUB_PROJECT_SRC}) 
target_link_libraries("${PROJECT_NAME}" ${OpenCV_LIBS}) 

在主CMakeLists.txt包括子項目目錄:

add_subdirectory(SubProjectA) 
add_subdirectory(SubProjectB) 

從當前目錄獲取項目名稱的方法是從this答案服用。