diff --git a/src/sbbs3/scfg/CMakeLists.txt b/src/sbbs3/scfg/CMakeLists.txt
index 80c95f04f644cf9a4cbf6e15b792fc6222281250..a74f71d1a89cedbbe5856f7cb1c0fbcc283a01dd 100644
--- a/src/sbbs3/scfg/CMakeLists.txt
+++ b/src/sbbs3/scfg/CMakeLists.txt
@@ -2,22 +2,7 @@ project(SCFG C)
 
 cmake_minimum_required(VERSION 2.8.11)
 
-macro(double_require_lib_dir TARGET LIB LIBDIR)
-	if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}")
-		if(NOT DEFINED ${LIBDIR}_DONE)
-			add_subdirectory(../../${LIBDIR} ${LIB})
-			set(${LIBDIR}_DONE TRUE)
-		endif()
-	endif()
-	add_dependencies(${TARGET} ${LIB})
-	target_include_directories(${TARGET} PRIVATE ../../${LIBDIR})
-	target_compile_definitions(${TARGET} PRIVATE $<TARGET_PROPERTY:${LIB},INTERFACE_COMPILE_DEFINITIONS>)
-	target_link_libraries(${TARGET} ${LIB})
-endmacro()
-
-macro(double_require_lib TARGET LIB)
-	double_require_lib_dir(${TARGET} ${LIB} ${LIB})
-endmacro()
+INCLUDE (../../build/SynchronetMacros.cmake)
 
 add_executable(scfg
 	scfg.c
@@ -49,3 +34,27 @@ target_compile_definitions(scfg PRIVATE SCFG)
 
 add_executable(makehelp makehelp.c)
 double_require_lib(makehelp xpdev)
+
+add_custom_command(OUTPUT
+		${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/scfghelp.dat
+		${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/scfghelp.ixb
+	COMMAND makehelp "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
+	DEPENDS makehelp
+		scfg.c
+		scfgsys.c
+		scfgmsg.c
+		scfgsub.c
+		scfgnode.c
+		scfgchat.c
+		scfgxfr1.c
+		scfgxfr2.c
+		scfgnet.c
+		scfgxtrn.c
+	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(help ALL 
+	DEPENDS
+		${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/scfghelp.dat
+		${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/scfghelp.ixb
+)