>

다른 사람의 연구 코드를 재현 할 수있게 만들려고 노력하고 있으므로 다른 사람들이 지금 당장 겪고있는 것과 같은 문제가 발생하지 않습니다. 그러나 cmake에 대한 경험이 부족합니다. 문서를 읽은 후 수행 할 수있는 작업은 다음과 같습니다.
CMakeLists.txt 와 같은 폴더에   io_utils.h 라는 파일이 있습니다   ROOT_PATH 와 함께  값이 VALUE_ROOT_PATH 인 변수 . 해당 문자열을 파일의 현재 디렉토리 값으로 바꾸고 싶습니다. 그래서 CMakeLists.txt 에 다음을 추가하려고했습니다. :

# Set ROOT_PATH in io_utils.h
FIND_PATH(BUILD_PATH CMakeLists.txt . )
FILE(READ ${BUILD_PATH}io_utils.h IO_UTILS)
STRING(REGEX REPLACE "VALUE_ROOT_PATH" "${BUILD_PATH}" MOD_IO_UTILS "${IO_UTILS}" )
FILE(WRITE ${BUILD_PATH}io_utils.h "${MOD_IO_UTILS}")

만들고 설치하려고했지만 작동하지 않아 파일이 변경되지 않습니다. 내가 한 일이 뭐가 문제 야?

  • 답변 # 1

    configure_file 를 사용하는 다른 접근법을 제안합니다  cmake 매크로. 먼저 cmake에서 설정하려는 변수를 참조하는 템플릿 파일을 만든 다음 매크로가 변수 대신 실제 값을 대체합니다. 예를 들어 템플릿 파일 io_utils.h.in 가 있다고 가정 해 봅시다.  다음과 같이 보입니다 :

    const char* ROOT_PATH = "${BUILD_PATH}";
    
    
    당신의 CMakeLists.txt 에서 , 다음과 같이 할 수 있습니다 :

    configure_file( io_utils.h.in io_utils.h )
    
    

    cmake 를 실행할 때 첫 번째 파일을 템플릿 ( io_utils.h.in )으로 사용합니다.  두 번째 파일 ( io_utils.h )을 생성합니다.  여기에 값이 대체 됨 :

    const char* ROOT_PATH = "/path/to/CMakeLists.txt";
    
    
    그런데 CMake에는 최상위 CMakeLists.txt 로 디렉토리를 참조하는 내장 변수가 있습니다.   CMAKE_SOURCE_DIR 라고 . BUILD_PATH 를 교체해보십시오  이 변수로 위의 변수를 사용하십시오.

  • 답변 # 2

    이 경우 매크로를 정의하고 전처리 기가 작업을 수행하게하는 것이 훨씬 쉬워 보입니다 :

    add_definition(ROOT_PATH ${VALUE_ROOT_PATH})

관련 자료

  • 이전 Retrofit 및 RxJava를 사용하여 Android의 JSON 배열에서 JSON 객체를 하나씩 가져옵니다
  • 다음 C # 자동 지우기 Winform 텍스트 상자