2012-07-02 3 views
8

를 만듭니다.
client.c 안에 lib.c에 정의 된 함수의 선언을 얻기 위해 lib.h 파일을 포함합니다.cmake 내가 세 개의 파일이 공유 객체

정확한 CMakeLists 파일을 말해 줄 사람이 나에게 알려줘서 소스 영역 Cmake의 임시 파일과 바이너리 및 라이브러리 (.dll은 믿을 수있는 Windows의 경우)가 별도의 빌드 및 바이너리 디렉토리에서 생성됩니다. Cmake는 기본적으로 별도의 빌드 디렉토리에 빌드

답변

4

(나는이 예제를 테스트하지 않았다) :

PROJECT(myproject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

SET(mylibSRCS lib.c) 
SET(myprogSRCS client.c) 

ADD_LIBRARY(mylib ${mylibSRCS}) 
ADD_EXECUTABLE(myprog ${myprogSRCS}) 

TARGET_LINK_LIBRARIES(myprog mylib) 

을 당신이 할 :

mkdir build 
cd build 
cmake .. 
make 

모든 빌드에서 일 것이다.

+0

이 쉘 명령을 실행하지 않고 새로운 디렉토리에 항상 빌드 할 수있는 방법이 있나요 :

이 솔루션은 그래서 같은 "공유"옵션을 누락? 내가 봤지만 어떤 유용한 링크를 찾을 수 없습니다. –

+0

http://getackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrap-scripts/11144109#11144109 – Fraser

+0

예. 'mkdir 빌드 & cd 빌드 & cmake .. & make' 할 수 있습니다. 저장소를 수퍼 클린업해야하는 경우 빌드 디렉토리 만 삭제하면됩니다. 이렇게하면 생성 된 항목이 원본 소스와 분리됩니다. – Stewart

11

이 솔루션은 .so 파일을 만들지 않지만 cmake와 더 이상 포함 시키려면 cmake 상당 파일을 만듭니다. 내가 가진 솔루션을 찾고 있어요
이에 상응를 제공합니다 :

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o 

실행시 dlopen을 동적으로로드 할 수있는 plugin_lib.so를 생성한다.

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

수락 된 답변이 업데이트되어야합니다. –

관련 문제