“CMAKE”不会创建“调试”或“发布”输出文件夹

vel*_*vel 1 c++ cmake visual-studio

我的.vcxproj文件有此段,其中包括用于ConfigurationPlatform的x64/Debugx64/Release。我正在 Windows 机器上工作

  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
..........
      </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我现在尝试创建CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(LogMsg)

# Set the project source files
set(SOURCES
    LogMsgMain.rc
    LogMsg.h
)

# Add executable target
add_executable(LogMsg ${SOURCES})

# Set the configuration-specific outputs
set_target_properties(LogMsg PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/Debug"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/Release"
)

# Add include directories
target_include_directories(LogMsg PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

# Specify custom build commands
add_custom_command(TARGET LogMsg POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/LogMsg.rc" "$<TARGET_FILE_DIR:LogMsg>"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/LogMsg.h" "$<TARGET_FILE_DIR:LogMsg>"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/MSG00001.bin" "$<TARGET_FILE_DIR:LogMsg>"
)
Run Code Online (Sandbox Code Playgroud)

之后我运行 cmake 命令:尝试了两种方法:

cmake -S . -B . -G "Visual Studio 17 2022" 
cmake -S . -B . -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Debug
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都没有使用.lib文件获取x64/DebugRelease文件夹。

有人可以看看我在 CMakeLists 配置中缺少什么

更新 我的新 CMakeLists.txt 文件如下:

cmake_minimum_required(VERSION 3.5)

project(FALogMsg)

# Set the project source files
set(SOURCES
    FALogMsg.cpp
    FALogMsgMain.rc
    FALogMsg.h
    resource.h
    stdafx.h
)

# Add executable target
add_library(FALogMsg ${SOURCES})

# Set the configuration-specific outputs
set_target_properties(FALogMsg PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/x64/Debug"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/x64/Release"
)

# Add include directories
target_include_directories(FALogMsg PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

# Specify custom build commands
add_custom_command(TARGET FALogMsg POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/FALogMsg.rc" "$<TARGET_FILE_DIR:FALogMsg>"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/FALogMsg.h" "$<TARGET_FILE_DIR:FALogMsg>"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/MSG00001.bin" "$<TARGET_FILE_DIR:FALogMsg>"
)
Run Code Online (Sandbox Code Playgroud)

错误:

C:\Projects..\base\LogMsg>cmake --build build --config 发布适用于 .NET Framework 的 MSBuild 版本 17.6.3+07e294721

构建自定义规则 C:/Projects/../base/LogMsg/CMakeLists.txt
LogMsg.cpp LogMsg.vcxproj -> C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\Release\LogMsg.lib将文件(如果不同)从“C:/Projects/AccurevMigration/Projects/workspace/OTM_PlaceHolder_Work_v2/base/LogMsg/build/MSG00001.bin”复制到“C:/Projects/AccurevMigration/Projects/workspace/OTM_PlaceH”时出错
old_Work_v2/base/LogMsg/build/Release"。C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误 MSB3073:命令“ setlocal [C:\Projects\AccurevMigration\Projects\workspace\OTM _PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft。 CppCommon.targets(160,5):错误 MSB3073:“C:\Program Files\CMake\bin\cmake.exe”-E copy_if_ Different C:/Projects/AcurevMigration/Projects/workspace/OTM_PlaceHolder_Work_v2/base/LogMsg/LogMsg。 rc C:/Projects/AccurevMigration/Projects/workspace/OTM_PlaceHolder_Work_v2/base/LogMsg/build/Release [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program文件 \ Microsoft Visual Studio \ 2022 \ Professional \ MSBuild \ Microsoft \ VC \ v170 \ Microsoft.CppCommon.targets(160,5):错误MSB3073:如果%errorlevel%neq 0转到:cmEnd [C:\ Projects \ AccurevMigration \ Projects \workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误MSB3073:“C:\ Program Files \ CMake \ bin \ cmake.exe”-E copy_if_ Different C:/ Projects / AccurevMigration / Projects / workspace / OTM_PlaceHolder_Work_v2 / base / LogMsg / LogMsg.h C:/ Projects / AccurevMigration / Projects /工作区/OTM_PlaceHolder_Work_v2/base/LogMsg/build/Release [C:\Projects\AccurevMigratio\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\ MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误 MSB3073:如果 %errorlevel% neq 0 转到:cmEnd [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\ build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误 MSB3073:“C:\Program Files\CMake \bin\cmake.exe" -E copy_if_ Different C:/Projects/AccurevMigration/Projects/workspace/OTM_PlaceHolder_Work_v2/base/LogMsg/build/MSG00001.bin C:/Projects/AccurevMigration/Projects/workspace/OTM_PlaceHolder_Work_v2/base/LogMsg/构建/发布 [C:\Projects\Accure vMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\ Microsoft.CppCommon.targets(160,5):错误 MSB3073:如果 %errorlevel% neq 0 转到:cmEnd [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C: \Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: :cmEnd [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2 \base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: endlocal & 调用:cmErrorLevel %errorlevel% & 转到:cmDone [C:\项目\Acc urevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160 ,5): 错误 MSB3073: :cmErrorLevel [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\ Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误 MSB3073:退出 /b %1 [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: :cmDone [C:\Projects\AccurevMigration\Projects\workspace\ OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5):错误 MSB3073:如果%errorlevel% neq 0 转到:VCEnd [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj] C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft \VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: :VCEnd" 退出,代码为 1。 [C:\Projects\AccurevMigration\Projects\workspace\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg。 vcx项目]\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: :VCEnd" 退出,代码为 1。 [C:\Projects\AccurevMigration\项目\工作空间\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj]\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(160,5): 错误 MSB3073: :VCEnd" 退出,代码为 1。 [C:\Projects\AccurevMigration\项目\工作空间\OTM_PlaceHolder_Work_v2\base\LogMsg\build\LogMsg.vcxproj]

fab*_*ian 7

Visual Studio cmake 生成器是一个多配置生成器,即您创建的项目文件允许您构建多个配置。--config <configuration name>您可以通过for cmake --buildcmake --install等传递要使用的配置。而不是在配置期间提供此信息。

(顺便说一句,不建议重叠源目录和二进制目录,所以我将build在这里使用子目录)

cmake -G "Visual Studio 17 2022" -S . -B build
cmake --build build --config Release
cmake --build build --config Debug
Run Code Online (Sandbox Code Playgroud)

请注意,一般来说,在源树中创建文件不是一个好主意,因为这会导致在尝试基于同一源树设置多个配置时出现问题。建议写入二进制目录。此外,您根本没有x64在目标属性中指定任何内容。CMake 不会自动插入此内容(;它甚至无法生成支持 x64 和 Win32 配置的项目)。

另外,对于可执行目标,cmake 不会生成.lib文件,但.exe文件...