When trying to compile WebAssembly (wabt-rs
) for a dependent package, it failed on Ubuntu 18.04 LTS due to this error message.
wabt-sys-0.8.0/wabt/src/option-parser.cc: In lambda function:
wabt-sys-0.8.0/wabt/src/option-parser.cc:60:20:
error: ‘CMAKE_PROJECT_VERSION’ was not declared in this scope
printf("%s\n", CMAKE_PROJECT_VERSION);
^~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/wabt.dir/src/option-parser.cc.o] Error 1
make[1]: *** [CMakeFiles/wabt.dir/all] Error 2
make: *** [all] Error 2
thread 'main' panicked at '
command did not execute successfully, got: exit code: 2
The error appears to come from the fact that CMAKE_PROJECT_VERSION
isn’t defined in the source headers of the compilation. The problem is caused by the cmake
version on the system:
$ cmake --version
cmake version 3.10.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
That version (or any version below v3.12.0) generates a header file that looks like this:
/* #undef CMAKE_PROJECT_VERSION */
Whereas the project that’s compiling, expects it look like this:
#define CMAKE_PROJECT_VERSION "1.0.13"
One solution would be to upgrade cmake
to a later version, but depending on your distribution that may not be very convenient (due to dependencies etc.).
In my case, I manually added the header file. The error occurred on line /root/.cargo/registry/src/github.com-1ecc6299db9ec823/wabt-sys-0.8.0/wabt/src/option-parser.cc
according to my error message, so I modified that file and added the definition to the very top.
$ more /root/.cargo/registry/src/github.com-1ecc6299db9ec823/wabt-sys-0.8.0/wabt/src/option-parser.cc
/*
* Copyright 2016 WebAssembly Community Group participants
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define CMAKE_PROJECT_VERSION "1.0.13"
#include "src/option-parser.h"
I added that #define CMAKE_PROJECT_VERSION "1.0.13"
line, just above the first include statement.
After that, I re-ran the compile and it went through without a problem.