CMake macro to pre-compile Oracle Pro*C sources
Oracle provides the PreCompiler tools to allow developers to embed their
SQL queries inside their source code, for this purpose, we need to usee the
proc precompiler shipped with this package to generate C/C++ sources
for our SQL queries written in Pro* C, and build our application against
the generated sources.
in order to run the proc as a prebuild step in our CMake project, I prepared
the following macro which precompile operation on list of files provided as
input and saves the target sources in provided variable name.
macro(compile_proc)
set(options)
set(oneValueArgs ARG)
set(multiValueArgs FILES)
cmake_parse_arguments(ARGUMENT "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
foreach(procfile ${ARGUMENT_FILES})
add_custom_command(
OUTPUT ${procfile}.cpp
COMMAND
LD_LIBRARY_PATH=${ORACLE_HOME} ${ORACLE_HOME}/sdk/proc
DEFINE=UNIX DEFINE=Linux DEFINE=PROC SQLCHECK=SYNTAX LTYPE=NONE MODE=ORACLE LINES=YES CODE=CPP CPP_SUFFIX=cpp DEF_SQLCODE=YES
include=/usr/lib/clang/17/include/
include=${CMAKE_CURRENT_SOURCE_DIR}
iname=${CMAKE_CURRENT_SOURCE_DIR}/${procfile}
oname=${CMAKE_CURRENT_BINARY_DIR}/${procfile}.cpp
DEPENDS
${procfile}
COMMENT "Pre-Compile ${procfile}"
)
list(APPEND "${ARGUMENT_ARG}" ${procfile}.cpp)
endforeach()
endmacro(compile_proc)
defining this macro, later we can use it as follows:
compile_proc(
ARG oracle_sources
FILES
file1.pc
file2.pc
file3.pc
)
add_executable(app
${oracle_sources}
...
)