Skip to content

Commit 5e3c763

Browse files
authored
Merge pull request #6413 from xmake-io/cmake
improve cmake configs
2 parents d88bd9c + d98c1ab commit 5e3c763

File tree

1 file changed

+23
-35
lines changed

1 file changed

+23
-35
lines changed

xmake/modules/package/tools/cmake.lua

+23-35
Original file line numberDiff line numberDiff line change
@@ -400,53 +400,44 @@ end
400400

401401
-- get configs for generic
402402
function _get_configs_for_generic(package, configs, opt)
403+
local envs = {}
403404
local cflags = _get_cflags(package, opt)
404405
if cflags then
405-
table.insert(configs, "-DCMAKE_C_FLAGS=" .. cflags)
406+
envs.CMAKE_C_FLAGS = cflags
406407
end
407408
local cxxflags = _get_cxxflags(package, opt)
408409
if cxxflags then
409-
table.insert(configs, "-DCMAKE_CXX_FLAGS=" .. cxxflags)
410+
envs.CMAKE_CXX_FLAGS = cxxflags
410411
end
411412
local asflags = _get_asflags(package, opt)
412413
if asflags then
413-
table.insert(configs, "-DCMAKE_ASM_FLAGS=" .. asflags)
414+
envs.CMAKE_ASM_FLAGS = asflags
414415
end
415416
local ldflags = _get_ldflags(package, opt)
416417
if ldflags then
417-
table.insert(configs, "-DCMAKE_EXE_LINKER_FLAGS=" .. ldflags)
418+
envs.CMAKE_EXE_LINKER_FLAGS = ldflags
418419
end
419420
local shflags = _get_shflags(package, opt)
420421
if shflags then
421-
table.insert(configs, "-DCMAKE_SHARED_LINKER_FLAGS=" .. shflags)
422-
table.insert(configs, "-DCMAKE_MODULE_LINKER_FLAGS=" .. shflags)
422+
envs.CMAKE_SHARED_LINKER_FLAGS = shflags
423+
envs.CMAKE_MODULE_LINKER_FLAGS = shflags
423424
end
424425
if not package:is_plat("windows", "mingw") and package:config("pic") ~= false then
425-
table.insert(configs, "-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
426+
envs.CMAKE_POSITION_INDEPENDENT_CODE = "ON"
426427
end
427428
if not package:use_external_includes() then
428-
table.insert(configs, "-DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON")
429-
end
430-
local has_already_debugflag = opt._configs_str and opt._configs_str:find("CMAKE_BUILD_TYPE", 1, true)
431-
if package:is_debug() then
432-
if not has_already_debugflag then
433-
table.insert(configs, "-DCMAKE_BUILD_TYPE=Debug")
434-
end
435-
else
436-
if not has_already_debugflag then
437-
table.insert(configs, "-DCMAKE_BUILD_TYPE=Release")
438-
end
429+
envs.CMAKE_NO_SYSTEM_FROM_IMPORTED = "ON"
439430
end
431+
envs.CMAKE_BUILD_TYPE = package:is_debug() and "Debug" or "Release"
440432
if package:is_library() then
441-
local has_already_libflag = opt._configs_str and opt._configs_str:find("BUILD_SHARED_LIBS", 1, true)
442-
if not has_already_libflag then
443-
table.insert(configs, "-DBUILD_SHARED_LIBS=".. (package:config("shared") and "ON" or "OFF"))
444-
end
433+
envs.BUILD_SHARED_LIBS = package:config("shared") and "ON" or "OFF"
445434
end
435+
_insert_configs_from_envs(configs, envs, opt)
446436
end
447437

448438
-- get configs for windows
449439
function _get_configs_for_windows(package, configs, opt)
440+
local envs = {}
450441
local cmake_generator = opt.cmake_generator
451442
if not cmake_generator or cmake_generator:find("Visual Studio", 1, true) then
452443
table.insert(configs, "-A")
@@ -463,38 +454,35 @@ function _get_configs_for_windows(package, configs, opt)
463454
end
464455
local vs_toolset = toolchain_utils.get_vs_toolset_ver(_get_msvc(package):config("vs_toolset") or config.get("vs_toolset"))
465456
if vs_toolset then
466-
table.insert(configs, "-DCMAKE_GENERATOR_TOOLSET=" .. vs_toolset)
457+
envs.CMAKE_GENERATOR_TOOLSET = vs_toolset
467458
end
468459
end
469460

470461
-- use clang-cl
471462
if package:has_tool("cc", "clang", "clang_cl") then
472-
table.insert(configs, "-DCMAKE_C_COMPILER=" .. _translate_bin_path(package:build_getenv("cc")))
463+
envs.CMAKE_C_COMPILER = _translate_bin_path(package:build_getenv("cc"))
473464
end
474465
if package:has_tool("cxx", "clang", "clang_cl") then
475-
table.insert(configs, "-DCMAKE_CXX_COMPILER=" .. _translate_bin_path(package:build_getenv("cxx")))
466+
envs.CMAKE_CXX_COMPILER = _translate_bin_path(package:build_getenv("cxx"))
476467
end
477468

478469
-- we maybe need patch `cmake_policy(SET CMP0091 NEW)` to enable this argument for some packages
479470
-- @see https://cmake.org/cmake/help/latest/policy/CMP0091.html#policy:CMP0091
480471
-- https://github.com/xmake-io/xmake-repo/pull/303
481472
if package:has_runtime("MT") then
482-
table.insert(configs, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded")
473+
envs.CMAKE_MSVC_RUNTIME_LIBRARY = "MultiThreaded"
483474
elseif package:has_runtime("MTd") then
484-
table.insert(configs, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug")
475+
envs.CMAKE_MSVC_RUNTIME_LIBRARY = "MultiThreadedDebug"
485476
elseif package:has_runtime("MD") then
486-
table.insert(configs, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL")
477+
envs.CMAKE_MSVC_RUNTIME_LIBRARY = "MultiThreadedDLL"
487478
elseif package:has_runtime("MDd") then
488-
table.insert(configs, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL")
479+
envs.CMAKE_MSVC_RUNTIME_LIBRARY = "MultiThreadedDebugDLL"
489480
end
490481

491482
local pdb_dir = path.unix(path.join(os.curdir(), "pdb"))
492-
if not opt._configs_str:find("CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY", 1, true) then
493-
table.insert(configs, "-DCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY=" .. pdb_dir)
494-
end
495-
if not opt._configs_str:find("CMAKE_PDB_OUTPUT_DIRECTORY", 1, true) then
496-
table.insert(configs, "-DCMAKE_PDB_OUTPUT_DIRECTORY=" .. pdb_dir)
497-
end
483+
envs.CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY = pdb_dir
484+
envs.CMAKE_PDB_OUTPUT_DIRECTORY = pdb_dir
485+
_insert_configs_from_envs(configs, envs, opt)
498486

499487
if package:is_cross() then
500488
_get_configs_for_cross(package, configs, opt)

0 commit comments

Comments
 (0)