2017-02-17 15 views
-1

我寫的CMakeLists.txt文件具有以下文件結構Linux上cmake:如何編寫CMakeLists.txt以便於將Linux程序移植到Windows?

-main 
--include 
--bin 
--lib 
----SRC 
------CMakeLists.txt 
------dir1 
--------CMakeLists.txt 
------dir2 
--------CMakeLists.txt 

dir1/CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
set(HOME "/workspace/main") 
set(INCLUDE "${HOME}/include") 
set(LIB "${HOME}/lib") 
set(LIBRARY_OUTPUT_PATH "${HOME}/lib") 
set(CMAKE_BUILD_TYPE "Debug") 
set(CMAKE_CXX_COMPILER "g++") 
set(CMAKE_C_FLAGS_DEBUG "xxx") 
set(CMAKE_CXX_FLAGS_DEBUG "xxx") 
include_directories(${INCLUDE} ${INCLUDE}/AR ${INCLUDE}/linux-x86_64) 
add_library(video STATIC video.c video2.c) 

dir2目錄的CMakeLists.txt類似的內容

SRC/CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
add_subdirectory(dir1) 
add_subdirectory(dir2) 

我的問題是:如何編寫CMakeLists.txt爲了方便Linux程序移植到Windows

回答

1

變量CMAKE_SOURCE_DIR指的是頂級項目目錄。使用此變量而不是首頁用於引用項目中的目錄。

或者,爲了能夠將子項目構建爲獨立項目,您可以使用PROJECT_SOURCE_DIR來參考當前項目的目錄。請注意,對於這樣的子項目,您需要project()CMakeLists.txt(否則大多數CMake命令將不起作用)。

LIB/SRC/DIR1 /的CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
project(dir1) 
set(HOME "${PROJECT_SOURCE_DIR}/../../..") 
... 

另外,有可變CMAKE_CURRENT_SOURCE_DIR其總是指電流源目錄(其中執行CMakeLists.txt)。

的lib/SRC/DIR1 /的CMakeLists.txt

... 
set(HOME "${CMAKE_CURRENT_SOURCE_DIR}/../../..") 
... 
+0

我添加了一條語句,在'dir1'下的'CMakeLists.txt'中顯示'CMAKE_SOURCE_DIR'值。當我在'dir1'目錄中'cmake'時,變量值爲/ workspace/main/lib/SRC' –

+1

你的問題不會留下,你想從'dir1'調用'cmake'。相反,它有'SRC/CMakeLists.txt',它下降到子目錄中。另外,'dir1/CMakeLists.txt'不包含'project()'調用,所以目前不能單獨建立。那麼,你是否想要分別構建子項目「dir1」和「dir2」?如果是這樣,請在問題文章中添加關於此的概念。 – Tsyvarev

+0

是的。我想做'SRC'目錄下的每個庫都可以單獨構建。你有什麼好的方法嗎? –

1

顯然,不要使用絕對路徑。大多數CMake命令相對於根CMakeLists.txt工作,所以不需要定義HOME

+0

我們如何設置相對路徑,如果'設置(XX,」 .. /../include")','$ {XX}/YY'將會是非法的路徑.cmake的實現將不會找到相應的頭文件。 –

+0

@HST你試過了嗎?沒有理由不這樣做。 – arrowd

相關問題