“CMake”这个名字是“cross platform make”
实践:
严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息
错误 CMake Error at C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/CMakeTestCCompiler.cmake:67 (message):
The C compiler
"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: 'D:/coding/myc/CMakeProject1/out/build/x64-debug/CMakeFiles/CMakeScratch/TryCompile-qi4abu'
Run Build Command(s): "C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" -v cmTC_8e63c
[1/2] C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\cl.exe /nologo /DWIN32 /D_WINDOWS /W3 /MDd /Ob0 /Od /RTC1 -Zi /showIncludes /FoCMakeFiles\cmTC_8e63c.dir\testCCompiler.c.obj /FdCMakeFiles\cmTC_8e63c.dir\ /FS -c D:\coding\myc\CMakeProject1\out\build\x64-debug\CMakeFiles\CMakeScratch\TryCompile-qi4abu\testCCompiler.c
[2/2] cmd.exe /C "cd . && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_8e63c.dir --rc=rc --mt=CMAKE_MT-NOTFOUND --manifests -- C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\link.exe /nologo CMakeFiles\cmTC_8e63c.dir\testCCompiler.c.obj /out:cmTC_8e63c.exe /implib:cmTC_8e63c.lib /pdb:cmTC_8e63c.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
FAILED: cmTC_8e63c.exe
cmd.exe /C "cd . && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_8e63c.dir --rc=rc --mt=CMAKE_MT-NOTFOUND --manifests -- C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\link.exe /nologo CMakeFiles\cmTC_8e63c.dir\testCCompiler.c.obj /out:cmTC_8e63c.exe /implib:cmTC_8e63c.lib /pdb:cmTC_8e63c.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
Active code page: 65001
RC Pass 1: command "rc /fo CMakeFiles\cmTC_8e63c.dir/manifest.res CMakeFiles\cmTC_8e63c.dir/manifest.rc" failed (exit code 0) with the following output:
系统找不到指定的文件。
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project. C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/CMakeTestCCompiler.cmake 67

添加
set(CMAKE_C_COMPILER_WORKS 1)
当前环境,没必要检查
关于 CMake“cmake is not able to compile a simple test program”错误 的解决方法_is not able to compile a simple test program.-CSDN博客 https://hpzwl.blog.csdn.net/article/details/111827832
严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息
错误 CMake Error at C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/CMakeTestCXXCompiler.cmake:60 (message):
The C++ compiler
"C:/msys64/ucrt64/bin/g++.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: 'D:/coding/myc/CMakeProject1/out/build/x64-debug/CMakeFiles/CMakeScratch/TryCompile-kcn4w6'
Run Build Command(s): "C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" -v cmTC_a1117
[1/2] C:\msys64\ucrt64\bin\g++.exe -o CMakeFiles/cmTC_a1117.dir/testCXXCompiler.cxx.obj -c D:/coding/myc/CMakeProject1/out/build/x64-debug/CMakeFiles/CMakeScratch/TryCompile-kcn4w6/testCXXCompiler.cxx
[2/2] cmd.exe /C "cd . && C:\msys64\ucrt64\bin\g++.exe /machine:x64 CMakeFiles/cmTC_a1117.dir/testCXXCompiler.cxx.obj -o cmTC_a1117.exe -Wl,--out-implib,libcmTC_a1117.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
FAILED: cmTC_a1117.exe
cmd.exe /C "cd . && C:\msys64\ucrt64\bin\g++.exe /machine:x64 CMakeFiles/cmTC_a1117.dir/testCXXCompiler.cxx.obj -o cmTC_a1117.exe -Wl,--out-implib,libcmTC_a1117.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
Active code page: 65001
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find /machine:x64: No such file or directory
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project. C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.27/Modules/CMakeTestCXXCompiler.cmake 60

添加 set(CMAKE_CXX_COMPILER_WORKS 1)
CMake 良心教程,教你从入门到入魂 - 知乎 https://zhuanlan.zhihu.com/p/500002865
CMake Tutorial — Mastering CMake https://cmake.org/cmake/help/book/mastering-cmake/cmake/Help/guide/tutorial/index.html
cmake_百度百科 https://baike.baidu.com/item/cmake/7138032?fr=aladdin
功能
历史
组态档
message("== Configuring legacy connector build using cmake generator: ${CMAKE_GENERATOR}")
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/jdbc/CMakeLists.txt")
message(FATAL_ERROR
"Could not find JDBC API sources at ${PROJECT_SOURCE_DIR}/jdbc."
" Have you updated git sub-modules?"
)
endif()
set(JDBC_DIR "${PROJECT_BINARY_DIR}/jdbc")
if(FORCE_REBUILD AND EXISTS "${JDBC_DIR}/CMakeCache.txt")
file(REMOVE ${JDBC_DIR}/CMakeCache.txt)
endif()
file(MAKE_DIRECTORY "${JDBC_DIR}")
#############################################################################
#
# Configure legacy connector build environment in ${JDBC_DIR}
#
if(BUILD_STATIC)
list(APPEND jdbc_cmake_opts -DENABLE_BUILD_STATIC=ON)
else()
list(APPEND jdbc_cmake_opts -DENABLE_BUILD_DYNAMIC=ON)
endif()
if(MAINTAINER_MODE)
list(APPEND jdbc_cmake_opts -DENABLE_BUILD_STATIC=ON)
endif()
if(MYSQL_DIR)
list(APPEND jdbc_cmake_opts -DMYSQL_DIR=${MYSQL_DIR})
endif()
if(MYSQL_CONFIG_EXECUTABLE)
list(APPEND jdbc_cmake_opts -DMYSQL_CONFIG_EXECUTABLE=${MYSQL_CONFIG_EXECUTABLE})
endif()
list(APPEND jdbc_cmake_opts -DMYSQLCLIENT_STATIC_LINKING=ON)
if(CMAKE_BUILD_TYPE)
if(CMAKE_BUILD_TYPE MATCHES "[Ss][Tt][Aa][Tt][Ii][Cc]")
list(APPEND jdbc_cmake_opts -DCMAKE_BUILD_TYPE=Release)
else()
list(APPEND jdbc_cmake_opts -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
endif()
endif()
if(DEFINED STATIC_MSVCRT)
list(APPEND jdbc_cmake_opts -DSTATIC_MSVCRT=${STATIC_MSVCRT})
endif()
if(VS)
list(APPEND jdbc_cmake_opts -DVS=${VS})
endif()
#
# Find Boost which is required by legacy connector
#
include(boost)
list(APPEND jdbc_cmake_opts -DBOOST_ROOT=${BOOST_ROOT})
#
# Generate version info for legacy connector
#
configure_file(
"${PROJECT_SOURCE_DIR}/jdbc/VersionInfo.cmake.in"
"${JDBC_DIR}/VersionInfo.cmake"
@ONLY
)
# Dirty trick to speed up cmake set up time.
file(
COPY "${CMAKE_BINARY_DIR}/CMakeFiles/${CMAKE_VERSION}"
DESTINATION "${JDBC_DIR}/CMakeFiles"
)
if(1)
execute_process(
COMMAND ${CMAKE_COMMAND} -Wno-dev
-G "${CMAKE_GENERATOR}"
${jdbc_cmake_opts}
-DCMAKE_INSTALL_PREFIX=${JDBC_DIR}/install
-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
${PROJECT_SOURCE_DIR}/jdbc
WORKING_DIRECTORY ${JDBC_DIR}
RESULT_VARIABLE jdbc_config
)
endif()
if(jdbc_config)
message(FATAL_ERROR "Could not configure legacy connector build: ${jdbc_config}")
endif()
#############################################################################
#
# Target build_jdbc which triggers build and installation of the legacy
# connector.
#
#
# jdbc.buildstamp
#
set(JDBC_BUILD_STAMP "${PROJECT_BINARY_DIR}/jdbc.buildstamp")
file(REMOVE "${JDBC_BUILD_STAMP}")
#message("JDBC_BUILD_STAMP: ${JDBC_BUILD_STAMP}")
set(CONFIG_EXPR
$<$<CONFIG:Static>:Release>$<$<NOT:$<CONFIG:Static>>:$<CONFIGURATION>>
)
add_custom_command(OUTPUT ${JDBC_BUILD_STAMP}
COMMAND ${CMAKE_COMMAND} -E remove_directory install
COMMAND ${CMAKE_COMMAND}
--build . --target install --config ${CONFIG_EXPR} --clean-first
# Move installed headers from include/ to include/jdbc and rename lib/
# to lib64/ for 64-bit platform
COMMAND ${CMAKE_COMMAND} -E remove_directory install/jdbc
COMMAND ${CMAKE_COMMAND} -E rename install/include install/jdbc
COMMAND ${CMAKE_COMMAND} -E make_directory install/include
COMMAND ${CMAKE_COMMAND} -E copy_directory install/jdbc install/include/jdbc
COMMAND ${CMAKE_COMMAND} -E remove_directory install/jdbc
COMMAND ${CMAKE_COMMAND} -E touch ${JDBC_BUILD_STAMP}
WORKING_DIRECTORY ${JDBC_DIR}
COMMENT "Building legacy connector library using configuration: $(Configuration)"
)
# Collect sources of legacy connector and specify them in the build
# target.
unset(jdbc_sources)
foreach(dir driver cppconn thread)
file(
GLOB_RECURSE sources
#RELATIVE "${PROJECT_SOURCE_DIR}/jdbc/${dir}"
"${PROJECT_SOURCE_DIR}/jdbc/${dir}/*.cpp"
"${PROJECT_SOURCE_DIR}/jdbc/${dir}/*.h"
"${PROJECT_SOURCE_DIR}/jdbc/${dir}/*.cmake"
"${PROJECT_SOURCE_DIR}/jdbc/${dir}/*.cm"
"${PROJECT_SOURCE_DIR}/jdbc/${dir}/CMakeLists.txt"
)
# TODO: Split into Headers/Sources/Other sub-groups
source_group(${dir} FILES ${sources})
list(APPEND jdbc_sources ${sources})
endforeach()
add_custom_target(build_jdbc ALL
DEPENDS ${JDBC_BUILD_STAMP}
SOURCES ${jdbc_sources}
)
#############################################################################
#
# Import legacy connector library so that it can be used by other targets.
#
set(JDBC_INCLUDES ${Boost_INCLUDE_DIRS} "${JDBC_DIR}/install/include")
#message("legacy connector includes: ${JDBC_INCLUDES}")
#
# Import library targets exported from the legacy connector project.
#
include("${JDBC_DIR}/exports.cmake")
if(BUILD_STATIC)
set(JDBC_LIB mysqlcppconn-static)
else()
set(JDBC_LIB mysqlcppconn)
endif()
add_dependencies(${JDBC_LIB} build_jdbc)
set(JDBC_LIBS ${JDBC_LIB} CACHE INTERNAL "legacy connector library")
#############################################################################
#
# Installation specs for the legacy connector
#
get_target_property(configurations ${JDBC_LIB} IMPORTED_CONFIGURATIONS)
foreach(config ${configurations})
get_target_property(location ${JDBC_LIB} IMPORTED_LOCATION_${config})
message("jdbc installing: ${location}")
if(config STREQUAL DEBUG)
set(loc "${INSTALL_LIB_DIR}/debug")
set(loc_static "${INSTALL_LIB_DIR_STATIC}/debug")
else()
set(loc "${INSTALL_LIB_DIR}")
set(loc_static "${INSTALL_LIB_DIR_STATIC}")
endif()
if(BUILD_STATIC)
install(
FILES ${location}
CONFIGURATIONS ${config}
DESTINATION ${loc_static}
COMPONENT JDBCDev
)
else()
if(WIN32)
install(FILES ${location} CONFIGURATIONS ${config} DESTINATION ${loc} COMPONENT JDBCDll)
# install import library for the DLL
get_target_property(imp_location ${JDBC_LIB} IMPORTED_IMPLIB_${config})
install(
FILES ${imp_location}
CONFIGURATIONS ${config}
DESTINATION ${loc_static}
COMPONENT JDBCDev
)
else()
# We need to install soname and linkname links together with the shared
# library.
get_filename_component(name "${location}" NAME)
get_filename_component(loc_path "${location}" PATH)
get_target_property(soname ${JDBC_LIB} IMPORTED_SONAME_${config})
set(linkname "${CMAKE_SHARED_LIBRARY_PREFIX}mysqlcppconn${CMAKE_SHARED_LIBRARY_SUFFIX}")
#
# Warning: Using undocumented file(INSTALL ...) signature which creates
# required symlinks. This command is used in install scripts generated
# by cmake.
#
install(CODE
"file(INSTALL
DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${loc}\"
TYPE SHARED_LIBRARY
FILES
\"${location}\"
\"${loc_path}/${soname}\"
\"${loc_path}/${linkname}\"
)"
)
endif()
endif()
endforeach()
install(
DIRECTORY ${JDBC_DIR}/install/include/jdbc
DESTINATION ${INSTALL_INCLUDE_DIR}
COMPONENT JDBCDev
)
#
# In maintainer mode add specifications for installing the static library
# which is always built in this mode.
#
if(MAINTAINER_MODE)
add_dependencies(mysqlcppconn-static build_jdbc)
get_target_property(location mysqlcppconn-static IMPORTED_LOCATION_RELEASE)
message("jdbc installing: ${location} (MAINTAINER_MODE)")
install(
FILES ${location}
CONFIGURATIONS Static
DESTINATION "${INSTALL_LIB_DIR_STATIC}"
COMPONENT JDBCDev
)
endif()
#
# Install external dependencies of MySQL client library, such as OpenSSL,
# if bundled with client library installation.
#
# Note: if main connector uses OpenSSL, then we will use the same libraries
# to satisfy client library dependency. But if main connector does not use
# OpenSSL, we copy required dependencies from MySQL installation.
#
if(BUNDLE_DEPENDENCIES AND WITH_SSL STREQUAL "bundled")
message("Bundling OpenSSL libraries from: ${MYSQL_DIR}")
install(DIRECTORY "${MYSQL_DIR}/bin/" DESTINATION lib64
FILES_MATCHING PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}"
COMPONENT JDBCDev
)
endif()
#############################################################################
#
# Public header checks
#
if(WITH_HEADER_CHECKS)
# Prepare location where checks will be performed.
set(CHECK_DIR "${JDBC_DIR}/headers_check")
file(REMOVE_RECURSE "${CHECK_DIR}")
file(MAKE_DIRECTORY "${CHECK_DIR}")
# Dirty trick to speed up cmake set up time.
file(
COPY "${CMAKE_BINARY_DIR}/CMakeFiles/${CMAKE_VERSION}"
DESTINATION "${CHECK_DIR}/CMakeFiles"
)
#
# Target to run header checks.
#
ADD_CUSTOM_TARGET(Headers_jdbc
COMMAND ${CMAKE_COMMAND}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DJDBC_DIR=${JDBC_DIR}
-DJDBC_INCLUDES="${JDBC_INCLUDES}"
-DHEADERS_DIR=${PROJECT_SOURCE_DIR}/cdk/cmake/headers
-DCHECK_DIR=${CHECK_DIR}
-P ${PROJECT_SOURCE_DIR}/cmake/jdbc_headers_check.cmake
SOURCES ${all_headers}
)
add_dependencies(Headers_jdbc build_jdbc)
add_test(NAME Headers_jdbc
COMMAND cmake --build . --target Headers_jdbc
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
message(STATUS "Added JDBC public headers test")
endif()
message("== legacy connector build configured")

浙公网安备 33010602011771号