簡體   English   中英

使用 CMake 構建 project.sln 時發布構建事件錯誤

[英]Post build event error when building project.sln with CMake

我的任務是將大型框架轉換並構建為 CMake 樹和二進制文件。 目前,該框架是使用 VS 2017 構建的,創建了一個名為 Framework_static_vc15.sln 的解決方案。 由於這是一個大型項目,我選擇使用轉換器為該項目的每個部分創建 CMakeLists.txt 文件。 這是我使用的轉換器的鏈接。

https://cmakeconverter.readthedocs.io/en/develop/intro.html

這個轉換器成功創建了所有需要的文本文件,我可以運行命令

cmake -S . -B build

要創建一個目錄,我應該能夠運行cmake --build build on。 但是,當我運行上述命令時,每次構建都會失敗並出現以下錯誤

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: The command "setlocal [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcx
proj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: cd C:\Work\SVN\Software\Framework\Source\UeiDaqCore [C:\Work\SVN\Software\Framework\build\Source\
UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: C: [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if not exist ..\..\CPP\lib mkdir ..\..\CPP\lib [C:\Work\SVN\Software\Framework\build\Source\UeiDa
qCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: copy C:\Work\SVN\Software\Framework\Source\UeiDaqCore\..\..\Output\Win32\vs15_DebugUeiDaqvc15SD.l
ib ..\..\CPP\lib [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: cd.      [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: cd.   [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: :cmEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone [C:\Work\SVN\Software\Framework\build\S
ource\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: :cmErrorLevel [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: exit /b %1 [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: :cmDone [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqC
ore_vc15.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1
38,5): error MSB3073: :VCEnd" exited with code 1. [C:\Work\SVN\Software\Framework\build\Source\UeiDaqCore\UeiDaqCore_vc
15.vcxproj]

此錯誤來自名為 UeiDaqCore 的子項目內的構建后事件,當 CMake 嘗試執行以下命令UeiDaqCore_vc15.vcxproj -> C:\Work\SVN\Software\Framework\Output\Win32\vs15_Debug\UeiDaqCore_vc15SD.lib CMake 給了我沒有所有路徑的錯誤列表,這里就是。

PostBuildEvent:
  setlocal
  cd C:\Work\SVN\Software\Framework\Source\UeiDaqCore
  if %errorlevel% neq 0 goto :cmEnd
  C:
  if %errorlevel% neq 0 goto :cmEnd
  if not exist ..\..\CPP\lib mkdir ..\..\CPP\lib
  if %errorlevel% neq 0 goto :cmEnd
  copy C:\Work\SVN\Software\Framework\Source\UeiDaqCore\..\..\Output\Win32\vs15_DebugUeiDaqvc15SD.lib ..\..\CPP\lib
  if %errorlevel% neq 0 goto :cmEnd
  cd.
  if %errorlevel% neq 0 goto :cmEnd
  cd.
  if %errorlevel% neq 0 goto :cmEnd
  :cmEnd
  endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
  :cmErrorLevel
  exit /b %1
  :cmDone
  if %errorlevel% neq 0 goto :VCEnd
  :VCEnd
  The system cannot find the file specified.

我查看了名為setlocal的后期構建事件的 Visual Studio UeiDaqCore 項目文件,還查看了 CmakeLists.txt 文件以查找setlocal后期構建事件,但找不到。 從錯誤文本來看,它似乎正在尋找一個名為UeiDaqCore_vc15.vcxproj UeiDaqCore_vc15SD.lib文件,但找不到它。 我不知道為什么,因為這兩個文件都位於它所查找的文件夾中。

我正在使用管理員命令提示符運行 CMake,因為我看到其他人遇到此問題,這是由於沒有管理員權限引起的。 在此下方,我將發布 UeiDaqCore 子項目的完整 CmakeLists.txt。

project(UeiDaqCore_vc15 CXX)

################################################################################
# Source groups
################################################################################
set(no_group_source_files
    ReadMe.txt
)
source_group("" FILES ${no_group_source_files})

set(Headers
    ../../CPP/include/UeiChannel.h
    ../../CPP/include/UeiConstants.h
    ../../CPP/include/UeiCustomScale.h
    ../../CPP/include/UeiDaq.h
    ../../CPP/include/UeiDaqAnsiC.h
    ../../CPP/include/UeiDaqError.h
    ../../CPP/include/UeiDataStream.h
    ../../CPP/include/UeiDevice.h
    ../../CPP/include/UeiDeviceEnumerator.h
    ../../CPP/include/UeiDriverEnumerator.h
    ../../CPP/include/UeiEvent.h
    ../../CPP/include/UeiException.h
    ../../CPP/include/UeiFrameUtils.h
    ../../CPP/include/UeiMessaging.h
    ../../CPP/include/UeiObject.h
    ../../CPP/include/UeiReader.h
    ../../CPP/include/UeiResourceParser.h
    ../../CPP/include/UeiSession.h
    ../../CPP/include/UeiSessionGroup.h
    ../../CPP/include/UeiStructs.h
    ../../CPP/include/Ueisystem.h
    ../../CPP/include/UeiTiming.h
    ../../CPP/include/UeiTrigger.h
    ../../CPP/include/UeiWriter.h
    pugxml.h
    resource.h
    ResourceParser.h
    SensorConversion.h
    SignalParser.h
    StdAfx.h
    UeiAnsiCSession.h
    UeiChannelimpl.h
    UeiCJCConverter.h
    UeiDaqCore.h
    UeiDaqCoreVer.h
    UeiDaqDriver.h
    UeiDaqDriverSession.h
    UeiDaqLV.h
    UeiDataStreamImpl.h
    UeiDeviceEnumeratorImpl.h
    UeiDeviceImpl.h
    UeiDriverEvent.h
    UeiMessagingImpl.h
    UeiObjectImpl.h
    UeiReaderImpl.h
    UeiRTDConverter.h
    UeiSessionImpl.h
    UeiSessionSettings.h
    UeiTimingImpl.h
    UeiTriggerImpl.h
    UeiWriterImpl.h
    UeiXmlParser.h
)
source_group("Headers" FILES ${Headers})

set(Sources
    ResourceParser.cpp
    SensorConversion.cpp
    StdAfx.cpp
    UeiChannel.cpp
    UeiChannelImpl.cpp
    UeiCJCConverter.cpp
    UeiCustomScale.cpp
    UeiDaqAnsiC.cpp
    UeiDaqCore.cpp
    UeiDaqLV.cpp
    UeiDataStream.cpp
    UeiDataStreamImpl.cpp
    UeiDevice.cpp
    UeiDeviceEnumerator.cpp
    UeiDeviceEnumeratorImpl.cpp
    UeiDeviceImpl.cpp
    UeiDriverEnumerator.cpp
    UeiException.cpp
    UeiFrameUtils.cpp
    UeiMessaging.cpp
    UeiMessagingImpl.cpp
    UeiObject.cpp
    UeiObjectImpl.cpp
    UeiReader.cpp
    UeiReaderImpl.cpp
    UeiResourceParser.cpp
    UeiRTDConverter.cpp
    UeiSession.cpp
    UeiSessionGroup.cpp
    UeiSessionImpl.cpp
    UeiSessionSettings.cpp
    UeiSystem.cpp
    UeiTiming.cpp
    UeiTimingImpl.cpp
    UeiTrigger.cpp
    UeiTriggerImpl.cpp
    UeiWriter.cpp
    UeiWriterImpl.cpp
    UeiXmlParser.cpp
)
source_group("Sources" FILES ${Sources})

set(ALL_FILES
    ${no_group_source_files}
    ${Headers}
    ${Sources}
)

################################################################################
# Target
################################################################################
add_library(${PROJECT_NAME} STATIC ${ALL_FILES})

add_precompiled_header(${PROJECT_NAME} "StdAfx.h" "StdAfx.cpp")

use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set(ROOT_NAMESPACE UeiDaqCore)

################################################################################
# Target name
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
    TARGET_NAME_DEBUG   "${PROJECT_NAME}SD"
    TARGET_NAME_RELEASE "${PROJECT_NAME}S"
)
################################################################################
# Output directory
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
    OUTPUT_DIRECTORY_DEBUG   "${CMAKE_CURRENT_SOURCE_DIR}/../../Output/${CMAKE_VS_PLATFORM_NAME}/vs15_$<CONFIG>"
    OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../Output/${CMAKE_VS_PLATFORM_NAME}/vs15_$<CONFIG>"
)
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PUBLIC
    "${CMAKE_CURRENT_SOURCE_DIR}/../../CPP/include;"
    "$ENV{UEICOMMON}/includes"
)

################################################################################
# Compile definitions
################################################################################
target_compile_definitions(${PROJECT_NAME} PRIVATE
    "$<$<CONFIG:Debug>:"
        "_DEBUG;"
        "UEIDAQ_DEBUG"
    ">"
    "$<$<CONFIG:Release>:"
        "NDEBUG"
    ">"
    "WIN32;"
    "_WINDOWS;"
    "UEIDAQSTATIC;"
    "__MSWINDOWS__;"
    "_MBCS"
)
set_source_files_properties(ResourceParser.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(StdAfx.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;UEIDAQSTATIC"
)
set_source_files_properties(UeiChannel.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiChannelImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDaqCore.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDataStream.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDataStreamImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDevice.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDeviceEnumerator.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDeviceEnumeratorImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiDeviceImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiException.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiObject.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiObjectImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiSession.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiSessionGroup.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiSessionImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiTiming.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiTimingImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiTrigger.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)
set_source_files_properties(UeiTriggerImpl.cpp PROPERTIES
    COMPILE_DEFINITIONS_DEBUG "_DEBUG"
    COMPILE_DEFINITIONS_RELEASE "NDEBUG"
    COMPILE_DEFINITIONS "WIN32;_WINDOWS;_MBCS;_USRDLL;UEIDAQCORE_EXPORTS"
)

################################################################################
# Compile and link options
################################################################################
if(MSVC)
    target_compile_options(${PROJECT_NAME} PRIVATE
        $<$<CONFIG:Debug>:
            /Od;
            /RTC1;
            /MTd
        >
        $<$<CONFIG:Release>:
            /O2;
            /Ob1;
            /GF;
            /MT;
            /Gy
        >
        /W3;
        /nologo;
        /Zi;
        /GR;
        ${DEFAULT_CXX_EXCEPTION_HANDLING}
    )
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(ResourceParser.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(StdAfx.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiChannel.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiChannelImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDaqCore.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDataStream.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDataStreamImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDevice.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDeviceEnumerator.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDeviceEnumeratorImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiDeviceImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiException.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiObject.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiObjectImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiSession.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiSessionGroup.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiSessionImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiTiming.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiTimingImpl.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiTrigger.cpp ${FILE_CL_OPTIONS})
    string(CONCAT FILE_CL_OPTIONS
        "$<$<CONFIG:Debug>:"
            "/Od;/RTC1"
        ">"
        "$<$<CONFIG:Release>:"
            "/O2"
        ">"
    )
    source_file_compile_options(UeiTriggerImpl.cpp ${FILE_CL_OPTIONS})
endif()

################################################################################
# Post build events
################################################################################
add_custom_command_if(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMANDS
    COMMAND   $<CONFIG:Debug> if not exist ..\\..\\CPP\\lib mkdir ..\\..\\CPP\\lib
    COMMAND   $<CONFIG:Debug> copy $<SHELL_PATH:${OUTPUT_DIRECTORY}>UeiDaqvc15SD.lib ..\\..\\CPP\\lib
    COMMAND $<CONFIG:Release> if not exist ..\\..\\CPP\\lib mkdir ..\\..\\CPP\\lib
    COMMAND $<CONFIG:Release> copy $<SHELL_PATH:${OUTPUT_DIRECTORY}>UeiDaqvc15S.lib ..\\..\\CPP\\lib
)

################################################################################
# Dependencies
################################################################################
add_dependencies(${PROJECT_NAME}
    UeiPDNADriver_vc15
    UeiSimuDriver_vc15
)

# Link with other targets.
target_link_libraries(${PROJECT_NAME} PUBLIC
    UeiPDNADriver_vc15
    UeiSimuDriver_vc15
)

我對 CMake 很陌生,對可能的解決方案的任何幫助將不勝感激。

編輯:這是直接從 Visual Studio window 復制的 UeiDaqCore 的構建后事件。

copy "$(SolutionDir)\Output\$(Platform)\vs15_$(Configuration)\UeiDaqvc15D.dll" "$(SystemRoot)\System32"
if not exist ..\..\CPP\lib mkdir ..\..\CPP\lib
copy "$(SolutionDir)\Output\$(Platform)\vs15_$(Configuration)\UeiDaqvc15D.lib" ..\..\CPP\lib

看起來POST_BUILD自定義命令格式不正確。 具體來說, copy命令沒有在定義的OUTPUT_DIRECTORY之間放置路徑分隔符:

C:\Work\SVN\Software\Framework\Source\UeiDaqCore\..\..\Output\Win32\vs15_Debug

從文件名:

UeiDaqvc15SD.lib

所以他們得到(錯誤地)連接:

C:\Work\SVN\Software\Framework\Source\UeiDaqCore\..\..\Output\Win32\vs15_DebugUeiDaqvc15SD.lib

嘗試在$<SHELL_PATH:${OUTPUT_DIRECTORY}>之后的自定義命令中添加路徑分隔符\\

add_custom_command_if(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMANDS
    COMMAND   $<CONFIG:Debug> if not exist ..\\..\\CPP\\lib mkdir ..\\..\\CPP\\lib
    COMMAND   $<CONFIG:Debug> copy $<SHELL_PATH:${OUTPUT_DIRECTORY}>\\UeiDaqvc15SD.lib ..\\..\\CPP\\lib
    COMMAND $<CONFIG:Release> if not exist ..\\..\\CPP\\lib mkdir ..\\..\\CPP\\lib
    COMMAND $<CONFIG:Release> copy $<SHELL_PATH:${OUTPUT_DIRECTORY}>\\UeiDaqvc15S.lib ..\\..\\CPP\\lib
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM