I am trying to force the user to pass a parameter before compiling. But I have a problem. After I run :
cd .. ;rm -r build; mkdir build; cd build; cmake -DUSER_DEFINED_BOARD_VERSION:STRING="SATNOGS_COMMS_VERSION_0_2_1" ..
Everything compiles as expected:
...
-- Detecting CXX compile features - done
-- USER_DEFINED_BOARD_VERSION: SATNOGS_COMMS_VERSION_0_2_1
-- BOARD_VERSION: 021
-- USER_DEFINED_BOARD_VERSION: SATNOGS_COMMS_VERSION_0_2_1
-- USER_DEFINED_BOARD_VERSION: SATNOGS_COMMS_VERSION_0_2_1
-- USER_DEFINED_BOARD_VERSION: SATNOGS_COMMS_VERSION_0_2_1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/victoria/zephyr-sdk-0.16.1/zephyrproject/libsatnogs-comms/build
However, after I run make the following is shown:
-- Found Nanopb: /home/victoria/zephyr-sdk-0.16.1/zephyrproject/modules/lib/nanopb
-- USER_DEFINED_BOARD_VERSION: OFF
CMake Error at /home/victoria/zephyr-sdk-0.16.1/zephyrproject/libsatnogs-comms/src/CMakeLists.txt:31 (message):
Error: Please provide the board version using
-DUSER_DEFINED_BOARD_VERSION=<value>
-- Configuring incomplete, errors occurred!
The rest of the code behaves fine if I use “SEND ERROR” as I use compile definitions in my code, but I cannot eliminate the error in the build process(while running make). Any ideas?
In CMakeCache.txt one can find:
//User-defined board version
USER_DEFINED_BOARD_VERSION:STRING=SATNOGS_COMMS_VERSION_0_2_1
And this is the CMakeLists.txt
# CMakeLists.txt
# Define a required option named USER_DEFINED_BOARD_VERSION
option(USER_DEFINED_BOARD_VERSION "User-defined board version" "")
message(STATUS "USER_DEFINED_BOARD_VERSION: ${USER_DEFINED_BOARD_VERSION}")
# Check if the USER_DEFINED_BOARD_VERSION option is provided
if (NOT USER_DEFINED_BOARD_VERSION)
message(FATAL_ERROR "Error: Please provide the board version using -DUSER_DEFINED_BOARD_VERSION=<value>")
endif()
# Process the provided board version
if (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_2_1")
set(BOARD_VERSION 021)
message(STATUS "BOARD_VERSION: ${BOARD_VERSION}")
elseif (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_3_0")
set(BOARD_VERSION 030)
message(STATUS "BOARD_VERSION: ${BOARD_VERSION}")
else()
message(FATAL_ERROR "Error: Please provide a valid board version. The valid inputs are: \"SATNOGS_COMMS_VERSION_0_2_1\" and \"SATNOGS_COMMS_VERSION_0_3_0\"")
endif()
..
# Check if the USER_DEFINED_BOARD_VERSION option is provided
if ("${USER_DEFINED_BOARD_VERSION}" STREQUAL "")
message(FATAL_ERROR "Error: Please provide the board version using -DUSER_DEFINED_BOARD_VERSION=<value>")
endif()
I removed the option line and changed the CMakeLists.txt according to your suggestion. The expected variable is indeed defined in the compilation step. Because the output to my code:
That’s all I want as I use compile time options in my code as described here for example.
But when I build the code with make the output is:
-- USER_DEFINED_BOARD_VERSION:
CMake Error at /home/victoria/zephyr-sdk-0.16.1/zephyrproject/libsatnogs-comms/src/CMakeLists.txt:29 (message):
Error: Please provide the board version using
-DUSER_DEFINED_BOARD_VERSION=<value>
It seems that the variable is cleared during build, and I want either to make it persistent OR to supress the error during build but dispaly it during the compile stage.
I tried this:
# Process the provided board version
if (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_2_1")
set(BOARD_VERSION 021)
message(STATUS "BOARD_VERSION: ${BOARD_VERSION}")
set(USER_DEFINED_BOARD_VERSION "SATNOGS_COMMS_VERSION_0_2_1" CACHE STRING "user-specified option")
elseif (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_3_0")
set(BOARD_VERSION 030)
message(STATUS "BOARD_VERSION: ${BOARD_VERSION}")
set(USER_DEFINED_BOARD_VERSION "SATNOGS_COMMS_VERSION_0_3_0" CACHE STRING "user-specified option")
else()
message(FATAL_ERROR "Error: Please provide a valid board version. The valid inputs are: \"SATNOGS_COMMS_VERSION_0_2_1\" and \"SATNOGS_COMMS_VERSION_0_3_0\"")
endif()
I was able to fix the behavior with these modifications:
# Check if the USER_DEFINED_BOARD_VERSION option is provided
if (NOT USER_DEFINED_BOARD_VERSION)
message(FATAL_ERROR "Error: Please provide the board version using -DUSER_DEFINED_BOARD_VERSION=<value>")
endif()
# Process the provided board version
if (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_2_1")
set(BOARD_VERSION 021)
elseif (${USER_DEFINED_BOARD_VERSION} STREQUAL "SATNOGS_COMMS_VERSION_0_3_0")
set(BOARD_VERSION 030)
else()
message(FATAL_ERROR "Error: Please provide a valid board version. The valid inputs are: \"SATNOGS_COMMS_VERSION_0_2_1\" and \"SATNOGS_COMMS_VERSION_0_3_0\"")
endif()
set(USER_DEFINED_BOARD_VERSION "SATNOGS_COMMS_VERSION_0_3_0" CACHE STRING "Board version") # This is only used for build which values are not used, for the compilation a user-provided variable MUST be given
######################################