2017-02-17 7 views
-1

나는cmake : Linux 프로그램에서 Windows 로의 이식을 용이하게하기 위해 CMakeLists.txt를 작성하는 방법은 무엇입니까?

-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 프로그램에 이식을 촉진하기 위해 CMakeLists.txt 작성하는 방법?

답변

1

변수 CMAKE_SOURCE_DIR최상위 프로젝트 디렉토리를 말합니다. 이 변수 대신 프로젝트의 디렉터리를 참조하십시오.

독립 프로젝트로 서브 프로젝트를 만들려면 PROJECT_SOURCE_DIR을 사용하면 현재 프로젝트디렉토리를 참조 할 수 있습니다. 이러한 서브 프로젝트에 대해서는 CMakeLists.txtproject()이 있어야합니다 (그렇지 않으면 대부분의 CMake 명령이 작동하지 않습니다).

lib 디렉토리/SRC/DIR1/CMakeLists.txt는 :

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

또한, 항상 (CMakeLists.txt 실행) 현재 소스 디렉토리을 의미하는 CMAKE_CURRENT_SOURCE_DIR 변수가있다.

lib 디렉토리/SRC/DIR1/CMakeLists.txt :

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

'dir1'에서'CMakeLists.txt'에'CMAKE_SOURCE_DIR' 값을 표시하는 문장을 추가했습니다. 'dir1' 디렉토리에서 'cmake'할 때,'/ workspace/main/lib/SRC/dir1' 변수의 값은 SRC 디렉토리'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