@@ -115,6 +115,11 @@ function cmake.generate(opt, callback)
115115 if presets_exists then
116116 local presets = Presets :parse (config .cwd )
117117
118+ -- Refresh build type to use from CMakePresets
119+ if config .configure_preset then
120+ config .build_type = presets :get_configure_preset (config .configure_preset ):get_build_type ()
121+ end
122+
118123 if not config .configure_preset then
119124 -- try to determine the confiure preset based on the build preset
120125 if config .build_preset then
@@ -331,7 +336,34 @@ function cmake.build(opt, callback)
331336 end )
332337 end
333338
334- if opt .target == nil and config .build_target == nil then
339+ local presets_exists = config .base_settings .use_preset and Presets .exists (config .cwd )
340+ if presets_exists then
341+ local presets = Presets :parse (config .cwd )
342+ if not config .build_preset then
343+ return cmake .select_build_preset (function (result )
344+ if not result :is_ok () then
345+ callback (result )
346+ return
347+ end
348+ cmake .generate ({ bang = false , fargs = {} }, function (generate_result )
349+ if not generate_result :is_ok () then
350+ callback (generate_result )
351+ return
352+ end
353+ cmake .build (opt , callback )
354+ end )
355+ end )
356+ end
357+ if config .build_preset then
358+ local build_preset = presets :get_build_preset (config .build_preset )
359+ if build_preset then
360+ config .build_target = build_preset :get_build_target ()
361+ end
362+ end
363+ end
364+
365+ -- If presets exists, use build target from it
366+ if presets_exists == false and opt .target == nil and config .build_target == nil then
335367 return cmake .select_build_target (true , function (result )
336368 if result :is_ok () then
337369 cmake .build (opt , callback )
@@ -342,7 +374,6 @@ function cmake.build(opt, callback)
342374 end
343375
344376 local args
345- local presets_exists = config .base_settings .use_preset and Presets .exists (config .cwd )
346377
347378 if presets_exists and config .build_preset then
348379 args = { " --build" , " --preset" , config .build_preset } -- preset don't need define build dir.
@@ -356,12 +387,9 @@ function cmake.build(opt, callback)
356387 if opt .target ~= nil then
357388 vim .list_extend (args , { " --target" , opt .target })
358389 vim .list_extend (args , fargs )
359- elseif config .build_target == " all " then
390+ elseif config .build_target ~= nil then
360391 vim .list_extend (args , { " --target" , " all" })
361392 vim .list_extend (args , fargs )
362- else
363- vim .list_extend (args , { " --target" , config .build_target })
364- vim .list_extend (args , fargs )
365393 end
366394
367395 if config .build_type ~= nil then
@@ -837,6 +865,7 @@ function cmake.select_build_preset(callback)
837865 end
838866 if config .build_preset ~= choice then
839867 config .build_preset = choice
868+ config .build_target = presets :get_build_preset (choice ):get_build_target ()
840869 end
841870 local associated_configure_preset = presets :get_configure_preset (
842871 presets :get_build_preset (choice ).configurePreset ,
0 commit comments