mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 11:42:28 +00:00 
			
		
		
		
	[CMake] Teach CMake to build the maxsat example as an external
				
					
				
			project. The project can be built by building the new `c_maxsat_example` target.
This commit is contained in:
		
							parent
							
								
									bfd1bbc136
								
							
						
					
					
						commit
						4d6cbd3788
					
				
					 2 changed files with 58 additions and 0 deletions
				
			
		|  | @ -23,6 +23,22 @@ ExternalProject_Add(c_example | ||||||
| ) | ) | ||||||
| set_target_properties(c_example PROPERTIES EXCLUDE_FROM_ALL TRUE) | set_target_properties(c_example PROPERTIES EXCLUDE_FROM_ALL TRUE) | ||||||
| 
 | 
 | ||||||
|  | ################################################################################ | ||||||
|  | # Build maxsat example project using libz3's C API as an external project | ||||||
|  | ################################################################################ | ||||||
|  | ExternalProject_Add(c_maxsat_example | ||||||
|  |   DEPENDS libz3 | ||||||
|  |   # Configure step | ||||||
|  |   SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/maxsat" | ||||||
|  |   CMAKE_ARGS "-DZ3_DIR=${CMAKE_BINARY_DIR}" | ||||||
|  |   # Build step | ||||||
|  |   ${EXTERNAL_PROJECT_BUILD_ALWAYS_ARG} | ||||||
|  |   BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/c_maxsat_example_build_dir" | ||||||
|  |   # Install Step | ||||||
|  |   INSTALL_COMMAND "${CMAKE_COMMAND}" -E echo "" # Dummy command | ||||||
|  | ) | ||||||
|  | set_target_properties(c_maxsat_example PROPERTIES EXCLUDE_FROM_ALL TRUE) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # Build example project using libz3's C++ API as an external project | # Build example project using libz3's C++ API as an external project | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								examples/maxsat/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								examples/maxsat/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | ||||||
|  | ################################################################################ | ||||||
|  | # Example maxsat project | ||||||
|  | ################################################################################ | ||||||
|  | # NOTE: Even though this is a C project, libz3 uses C++. When using libz3 | ||||||
|  | # as a static library if we don't configure this project to also support | ||||||
|  | # C++ we will use the C linker rather than the C++ linker and will not link | ||||||
|  | # the C++ standard library in resulting in a link failure. | ||||||
|  | project(Z3_C_MAXSAT_EXAMPLE C CXX) | ||||||
|  | cmake_minimum_required(VERSION 2.8.12) | ||||||
|  | find_package(Z3 | ||||||
|  |   REQUIRED | ||||||
|  |   CONFIG | ||||||
|  |   # `NO_DEFAULT_PATH` is set so that -DZ3_DIR has to be passed to find Z3. | ||||||
|  |   # This should prevent us from accidently picking up an installed | ||||||
|  |   # copy of Z3. This is here to benefit Z3's build sytem when building | ||||||
|  |   # this project. When making your own project you probably shouldn't | ||||||
|  |   # use this option. | ||||||
|  |   NO_DEFAULT_PATH | ||||||
|  | ) | ||||||
|  | message(STATUS "Z3_FOUND: ${Z3_FOUND}") | ||||||
|  | message(STATUS "Found Z3 ${Z3_VERSION_STRING}") | ||||||
|  | message(STATUS "Z3_DIR: ${Z3_DIR}") | ||||||
|  | 
 | ||||||
|  | add_executable(c_maxsat_example maxsat.c) | ||||||
|  | target_include_directories(c_maxsat_example PRIVATE ${Z3_C_INCLUDE_DIRS}) | ||||||
|  | target_link_libraries(c_maxsat_example PRIVATE ${Z3_LIBRARIES}) | ||||||
|  | 
 | ||||||
|  | if ("${CMAKE_SYSTEM_NAME}" MATCHES "[Ww]indows") | ||||||
|  |   # On Windows we need to copy the Z3 libraries | ||||||
|  |   # into the same directory as the executable | ||||||
|  |   # so that they can be found. | ||||||
|  |   foreach (z3_lib ${Z3_LIBRARIES}) | ||||||
|  |     message(STATUS "Adding copy rule for ${z3_lib}") | ||||||
|  |     add_custom_command(TARGET c_maxsat_example | ||||||
|  |       POST_BUILD | ||||||
|  |       COMMAND | ||||||
|  |         ${CMAKE_COMMAND} -E copy_if_different | ||||||
|  |         $<TARGET_FILE:${z3_lib}> | ||||||
|  |         $<TARGET_FILE_DIR:c_maxsat_example> | ||||||
|  |     ) | ||||||
|  |   endforeach() | ||||||
|  | endif() | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue