Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information