Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Splatting arguments for external program

Tags:

powershell

I'm trying to make a powershell script that runs CMake. Here is my sample code (splatting CMAKE_OPTIONS at the end):

$CMAKE_OPTIONS = @{
  "DBUILD_opencv_java:BOOL" = "OFF"
  "DBUILD_opencv_python:BOOL" = "OFF"
  "DBUILD_opencv_python2:BOOL" = "OFF"
  "DBUILD_opencv_python3:BOOL" = "OFF"
  "DBUILD_TESTS:BOOL" = "OFF"
  "DBUILD_PERF_TESTS:BOOL" = "OFF"
  "DBUILD_DOCS:BOOL" = "OFF"
  "DBUILD_EXAMPLES:BOOL" = "OFF"
  "DINSTALL_CREATE_DISTRIB:BOOL" = "ON"
}
# ... add something from user input
cmake -G $CMAKE_CONFIG_GENERATOR -DOPENCV_EXTRA_MODULES_PATH=$myRepo/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX=$myRepo/install/$REPO_SOURCE $myRepo/$REPO_SOURCE @CMAKE_OPTIONS

But I get an error:

Parse error in command line argument: -DBUILD_opencv_python:BOOL:OFF
Should be: VAR:type=value
CMake Error: No cmake script provided.
CMake Error: Problem processing arguments. Aborting.

It seems that instead of writing arguments foo = bar it does foo:bar. How to splat arguments correctly when calling external program? Or do I have to use an old approach with string concatenation and &cmake -p "myargs" $CMAKE_OPTIONS_STRING?

like image 531
Alex Zhukovskiy Avatar asked Oct 23 '25 16:10

Alex Zhukovskiy


1 Answers

For external programs use an array, not a hashtable:

$CMAKE_OPTIONS = @(
  "-DBUILD_opencv_java:BOOL=OFF",
  "-DBUILD_opencv_python:BOOL=OFF",
  "-DBUILD_opencv_python2:BOOL=OFF",
  "-DBUILD_opencv_python3:BOOL=OFF",
  "-DBUILD_TESTS:BOOL=OFF",
  "-DBUILD_PERF_TESTS:BOOL=OFF",
  "-DBUILD_DOCS:BOOL=OFF",
  "-DBUILD_EXAMPLES:BOOL=OFF",
  "-DINSTALL_CREATE_DISTRIB:BOOL=ON"
)

cmake ... @CMAKE_OPTIONS
like image 101
Ansgar Wiechers Avatar answered Oct 26 '25 07:10

Ansgar Wiechers



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!