2011-12-23 2 views
2

좀 target_link_libraries 있습니다cmake의 target_link_libraries

X와 연결하는 EXE와 x의 의존성에 결과
add_library(x x.cc) 
target_link_libraries(x depX1 depX2 depX3) 
add_executable(exe exe.cc) 
target_link_libraries(exe x ${shared_lib1} ${shared_lib2}) 

: depx1, depx2 등 문제는 shared_libs는 x와 종속의 사이에 인터된다는 것입니다 x이고 g ++ 4.6에서는 허용되지 않습니다 (이전 버전에서 작동했습니다).

수정 방법은 무엇입니까? CMakeLists.txt 파일에 지정된 것처럼 컴파일 링의 끝 부분에 공유 라이브러리를 넣어야합니다. 그래서 나는 그것들을 삽입하고 싶지 않습니다. 나는 편집 라인의 끝에 그것들을 넣고 싶습니다. 또한 depx1, depx2 depx3 등 자신의 종속성을뿐만 아니라 내가 원하는 유일한 점은 컴파일 링 라인의 끝에 나타나는 공유 라이브러리입니다.

어떻게할까요? 감사

이것은 추한 해킹 사용함으로써 해결이 해결 될 수 --LATER EDIT2-- =>

: SRC /에서 targetName/CMakeFiles/TargetName.dir/link.txt 링크가

add_custom_command(TARGET TargetName 
        PRE_LINK COMMAND ${PROJECT_SOURCE_DIR}/custom_script.sh 
        ARGS ${PROJECT_BINARY_DIR}/src/TargetName/CMakeFiles/TargetName.dir/link.txt) 
이다

커맨드 라인 CMake가 생성하고 custom_script.sh는 파일을 구문 분석하고 컴파일 링 라인의 끝에 동적 링크 라이브러리를 정렬하는 스크립트입니다.

는 --LATER EDIT--
그래서 본인은 현재 CMake없이 옵션은 컴파일 줄의 끝에와 g ++ 4.6, 모든 나누기와 공유 라이브러리를 넣어 함께! 이것은 대단하다!

+0

당신의 출력을 보여줄 수'VERBOSE가 = 1' 문제가 정확히 무엇을 볼 수 있도록? –

+0

안녕하세요, 출력은 다음과 같습니다 :/usr/bin/C++ -g -O2 -Wall -pthread -static x -shared_lib1 -shared_lib2 depX2 depX3. shared_lib1과 shared_lib2가 컴파일 라인의 끝에 위치하기를 원합니다. – FlorinP

+0

'add_library (x STATIC x.cc)'와 같은 정적 라이브러리가 필요하다면 어떻게할까요? 또한'target_link_libraries'에 두 번의 호출을 사용하십시오. 하나는 x가 있고 다른 하나는 공유 라이브러리입니다. –

답변

0

x 종속성을 반복 해 보셨습니까? 예를 들어 :

target_link_libraries (EXE X depX1 depX2 depX3 $ {shared_lib1} $ {shared_lib2})

+0

depX1, depX2, depX3에도 종속성이 있으므로 유지하기 어려운 매우 긴 문자열이 생성되므로 이는 선택 사항이 아닙니다. 나는 이미 그것을 설명했다. – FlorinP

관련 문제