
D:\FBXSDK\2020.3.4\samples\Camera\out\build\x64-Debug\ninja : error : build.ninja:79: bad $-escape (literal $ must be written as $$)
LINK_LIBRARIES = D:\FBXSDK\2020.3.4\lib\vs2022\x64\$(Configuration)\li...
^ near here
빌드하려는 프로젝트의 CMakeLists.txt 파일을 열어보자. 최상단에 INCLUDE("../../CMakeSettings.txt") 라는 코드가 보일 것이다. 이것정도는 cmake를 안써봤어도 대충 cpp짬밥이 있으면 이해 할 수 있다. #include랑 똑같겠지 뭐. 경로 따라가서 CMakeSettings.txt 파일을 확인해보자.
SET(CMAKE_MIN_REQ_VERSION 2.4)
cmake_minimum_required(VERSION ${CMAKE_MIN_REQ_VERSION})
INCLUDE("../../CMakeSettings.txt")
IF(NOT WIN32)
MESSAGE(SEND_ERROR "This sample can only compile on Windows platform.")
RETURN()
ENDIF()
FBX_PROJECT(UI_Example_SceneTreeView .)
SET(FBX_TARGET_SOURCE
"resource.h"
"SDK_Utility.cxx"
"SDK_Utility.h"
"stdafx.h"
"UI.cxx"
"UI.h"
"UI.ico"
"UI.rc"
)
ADD_EXECUTABLE(
${FBX_TARGET_NAME}
WIN32 #sets the application subsystem to Windows Application instead of Console
${FBX_TARGET_SOURCE}
)
SET_SAMPLES_GLOBAL_FLAGS()
CMakeLists.txt파일로 들어왔다. 코드가 많아보여서 무섭지만 사실 핵심은 위 에러 로그에서 떴던 $(Configuration) 요놈을 찾으면 된다. Ctrl+F 하니까 바로 나오는구만
SET(FBX_VARIANT "$(Configuration)")
IF(MSVC_VERSION GREATER 1910 AND MSVC_VERSION LESS 1920)
SET(FBX_COMPILER "vs2017")
ELSEIF(MSVC_VERSION GREATER 1919 AND MSVC_VERSION LESS 1930)
SET(FBX_COMPILER "vs2019")
ELSEIF(MSVC_VERSION GREATER 1929 AND MSVC_VERSION LESS 1940)
SET(FBX_COMPILER "vs2022")
ENDIF()
SET(FBX_TARGET_LIBS_PATH "${FBX_ROOT}/lib/${FBX_COMPILER}/${FBX_ARCH}/${FBX_VARIANT}")
SET(FBX_SDK_ABS ${FBX_TARGET_LIBS_PATH}/${FBX_SDK})
SET(FBX_REQUIRED_LIBS_DEPENDENCY ${FBX_SDK_ABS})
SET(FBX_VARIANT "$(Configuration)")코드만 { 가 아니라 ( 를 쓴다. 사실 cmake를 제대로 안써봐서 저게 제대로 작동 할 수도 있겠지만 코드가 통일돼있지 않다는 것부터 맘에 안든다. 우선 바꿔주자.바꿔주니까 에러로그가 바뀌었다!
'D:/FBXSDK/2020.3.4/lib/vs2022/x64/libfbxsdk-md.lib',
needed by 'D:/FBXSDK/2020.3.4/bin/vs2022-md/UI_Example_SceneTreeView.exe',
missing and no known rule to make it
D:\FBXSDK\2020.3.4\samples\UI Examples\SceneTreeView\out\build\x64-Debug\SceneTreeView
D:\FBXSDK\2020.3.4\samples\UI Examples\SceneTreeView\out\build\x64-Debug\ninja 1
{를 쓰는건지 위의 문제는 해결됐다.D:\FBXSDK\2020.3.4\lib\vs2022\x64\release\libfbxsdk-md.lib 이다.코드를 보니까 변수 설정에 문제가 있는 것 같다.
.
.
.
IF(NOT FBX_VARIANT)
SET(FBX_VARIANT "debug")
ENDIF()
SET(FBX_DEBUG)
IF (FBX_VARIANT MATCHES "debug")
SET(FBX_DEBUG 1)
ENDIF()
.
.
.
SET(FBX_VARIANT "${Configuration}") # Configuration은 외부로부터 들어오는 값
.
.
.
FBX_VARIANT 는 빌드 모드(디버그 빌드인지, 릴리즈 빌드인지)에 대해 식별하는 변수로 보이고 들어오는 Configuration은 라이브러리 이름에 대한 설정값 인 것 같다.FBX_VARIANT값을 Configuration으로 아예 덮어쓰기 해 버리니 디렉토리 위치가 제대로 나오지 않는 것 같다.SET(FBX_VARIANT "$(Configuration)"
SET(FBX_VARIANT "/${FBX_VARIANT}/${Configuration}") # Configuration은 외부로부터 들어오는 값
-- Configuring done (0.1s)
-- Generating done (0.0s)
-- Build files have been written to: D:/FBXSDK/2020.3.4/samples/UI Examples/SceneTreeView/out/build/x64-Debug
[0/1] Re-running CMake...
[1/2] Building CXX object CMakeFiles\UI_Example_SceneTreeView.dir\SDK_Utility.obj
D:\FBXSDK\2020.3.4\samples\UI Examples\SceneTreeView\out\build\x64-Debug\cl : 명령줄 warning D9025: '/W3'을(를) '/W4'(으)로 재정의합니다.
[2/2] Linking CXX executable D:\FBXSDK\2020.3.4\bin\vs2022-md\UI_Example_SceneTreeView.exe
