The precompiled headers are built twice, the second time is without any need
I use this CMakeLists.txt:
cmake_minimum_required(VERSION 3.15.4)
project(verilog_parser)
##
## build type
##
set(CMAKE_BUILD_TYPE Debug)
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
add_definitions(-DDEBUG)
endif()
##
## C++ standard level
##
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
##
## find packages
##
find_package(UHDM REQUIRED)
message(STATUS "Found libuhdm: VERSION=${UHDM_VERSION}")
##
## sources
##
set(LIB_SOURCES
listener.cpp
objects.cpp
util.cpp
verilog-parser.cpp
)
##
## targets
##
add_library(verilog-parser
${LIB_SOURCES}
)
add_executable(verilog-parser-test
main.cpp
)
target_link_libraries(verilog-parser
uhdm::uhdm
)
target_link_libraries(verilog-parser-test
verilog-parser
)
target_precompile_headers(verilog-parser PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/all-uhdm.h
)
Only the static library depends on large headers all-uhdm.h, and the executable only depends on a simple header for the library verilog-parser.
However, building executable's main.cpp is delayed to after the library is built, and precompiler headers are built for main.cpp, even though its target doesn't have precompiled headers setting:
[ 11%] Building CXX object CMakeFiles/verilog-parser.dir/cmake_pch.hxx.pch
[ 33%] Building CXX object CMakeFiles/verilog-parser.dir/objects.cpp.o
[ 33%] Building CXX object CMakeFiles/verilog-parser.dir/verilog-parser.cpp.o
[ 55%] Building CXX object CMakeFiles/verilog-parser.dir/util.cpp.o
[ 55%] Building CXX object CMakeFiles/verilog-parser.dir/listener.cpp.o
[ 66%] Linking CXX static library libverilog-parser.a
[ 66%] Built target verilog-parser
[ 77%] Building CXX object CMakeFiles/verilog-parser-test.dir/cmake_pch.hxx.pch
[ 88%] Building CXX object CMakeFiles/verilog-parser-test.dir/main.cpp.o
[100%] Linking CXX executable verilog-parser-test
[100%] Built target verilog-parser-test
Version: 3.25.1
FreeBSD 13.2
Edited by yurivict