2013-03-20 2 views
4

CMake를 사용하여 JNI jar를 만들려고합니다. 다음과 같은 것을 위해 적절한 순서로 수행해야합니다 : 특정 순서로 Cmake 빌드

  • 빌드 네이티브 라이브러리
  • 항아리의 모든
  • 에게

    1. 컴파일 class 파일
    2. 생성 .H 헤더 곳

      1. add_jar()으로 이루어집니다. custom_command)
      2. add_custom_command(TARGET ...)
      3. 이루어집니다이 add_library()
      4. 으로 완료가 이루어집니다 add_custom_command(TARGET ...) (-C 옵션은 내가 올바른 순서 지키 수있는 방법)

      add_jar에 의해 지원되지 않기 때문에 ? 처음 실행시 오류가 발생하는 경우가 있습니다.

      add_custom_commandPOST/PRE 빌드 옵션을 가지고 있지만, add_jaradd_library하지 않습니다. 인수가 TARGETadd_custom_commandDEPENDS 옵션을 사용합니까?

      add_library에게 2. 사용자 지정 명령이 실행되기를 기다리는 방법이 있습니까?

    +0

    add_dependencies를? – EHuhtala

    답변

    8

    내가 처음으로 CMake를 실행하는 동안 소스 파일이없는 add_library을 호출하고 있습니다.

    그렇다면 set_source_files_properties 명령을 사용하여 해당 소스 파일에 GENERATED 속성을 설정할 수 있습니다. 이것은 CMake가 설정 시간 (CMake가 실행될 때)에는 존재하지 않지만 빌드시 존재할 것이라는 것을 알 수 있음을 알 수 있습니다.

    add_library 앞에 add_jar 명령이 실행되도록하려면 add_dependencies을 사용하여 add_jar 대상에 대한 종속성을 만듭니다. add_library 전에 add_custom_command 명령을 실행하려면 사용자 지정 명령에 TARGET ... PRE_BUILD 옵션을 사용하십시오. lib 디렉토리에 대한 소스의 목록이 ${Srcs}라는 변수에 개최되는 경우

    예를 들어, 당신은 할 수 있습니다 :

    # Allow 'Srcs' to not exist at configure-time 
    set_source_files_properties(${Srcs} PROPERTIES GENERATED TRUE) 
    add_library(MyLib ${Srcs}) 
    
    # compile .class files 
    add_jar(MyJarTarget ...) 
    
    # generate .h headers 
    add_custom_command(TARGET MyLib PRE_BUILD COMMAND ...) 
    
    # Force 'add_jar' to be built before 'MyLib' 
    add_dependencies(MyLib MyJarTarget) 
    
    +0

    굉장합니다. 그것은 그것을했다 : add_dependencies 그리고 PRE/POST 빌드 종류가 인수에 의해 전달 된 타겟과 함께 커스텀 커맨드를 '결합'한다는 것을 아는 것). 실제로 나를 위해 일한 것은 add_jar이고, 그 다음 add_jar 대상의 POST_BUILD와 함께 custom_command javah, add_jar 대상에 종속적 인 add_library 및 라이브러리의 마지막 사용자 정의 명령 POST_BUILD입니다. 나는 trully 행복 해요, 나는 그것이 가능하다고 생각하지 않았다 cmake + java – quimnuss

    +0

    아! set_source_files_properties에 감사드립니다. 필자는 파일 이름이 자동 생성되기 때문에 수동으로 머리글을 나열하는 것을 좋아하지 않았습니다.그러나 include 디렉토리가 알려져 있기 때문에 문제가되지 않습니다. (VS 아래에 있지 않고 솔루션의 헤더를 원한다면 제외) http://stackoverflow.com/questions/1167154/listing-header-files-in-visual-studio -c-project-generated-by-cmake) – quimnuss

    +0

    @quimnuss 우수 - 다행 이군. – Fraser