diff --git a/cmake/util.cmake b/cmake/util.cmake
index 5d261a40..14fa7c2d 100644
--- a/cmake/util.cmake
+++ b/cmake/util.cmake
@@ -1,3 +1,12 @@
+# Adds a dependency hint to the link order, but does not block build on the dependency.
+function (qs_add_link_dependencies target)
+	set_property(
+		TARGET ${target}
+		APPEND PROPERTY INTERFACE_LINK_LIBRARIES
+		${ARGN}
+	)
+endfunction()
+
 function (qs_append_qmldir target text)
 	get_property(qmldir_content TARGET ${target} PROPERTY _qt_internal_qmldir_content)
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c518a1c9..707bc37c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,8 +2,8 @@ qt_add_executable(quickshell main.cpp)
 
 install(TARGETS quickshell RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 
-add_subdirectory(launch)
 add_subdirectory(build)
+add_subdirectory(launch)
 add_subdirectory(core)
 add_subdirectory(ipc)
 add_subdirectory(window)
diff --git a/src/crash/CMakeLists.txt b/src/crash/CMakeLists.txt
index 442859af..7fdd8305 100644
--- a/src/crash/CMakeLists.txt
+++ b/src/crash/CMakeLists.txt
@@ -14,4 +14,4 @@ target_link_libraries(quickshell-crash PRIVATE PkgConfig::breakpad -lbreakpad_cl
 # quick linked for pch compat
 target_link_libraries(quickshell-crash PRIVATE quickshell-build Qt::Quick Qt::Widgets)
 
-target_link_libraries(quickshell-core PRIVATE quickshell-crash)
+target_link_libraries(quickshell PRIVATE quickshell-crash)
diff --git a/src/dbus/dbusmenu/CMakeLists.txt b/src/dbus/dbusmenu/CMakeLists.txt
index ac50b28a..61cee42c 100644
--- a/src/dbus/dbusmenu/CMakeLists.txt
+++ b/src/dbus/dbusmenu/CMakeLists.txt
@@ -27,7 +27,8 @@ install_qml_module(quickshell-dbusmenu)
 # dbus headers
 target_include_directories(quickshell-dbusmenu PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 
-target_link_libraries(quickshell-dbusmenu PRIVATE Qt::Quick Qt::DBus quickshell-dbus)
+target_link_libraries(quickshell-dbusmenu PRIVATE Qt::Quick Qt::DBus)
+qs_add_link_dependencies(quickshell-dbusmenu quickshell-dbus)
 
 qs_module_pch(quickshell-dbusmenu SET dbus)
 
diff --git a/src/services/mpris/CMakeLists.txt b/src/services/mpris/CMakeLists.txt
index 122a0c5c..4440c0a7 100644
--- a/src/services/mpris/CMakeLists.txt
+++ b/src/services/mpris/CMakeLists.txt
@@ -38,6 +38,7 @@ qs_add_module_deps_light(quickshell-service-mpris Quickshell)
 install_qml_module(quickshell-service-mpris)
 
 target_link_libraries(quickshell-service-mpris PRIVATE Qt::Qml Qt::DBus)
+qs_add_link_dependencies(quickshell-service-mpris quickshell-dbus)
 
 qs_module_pch(quickshell-service-mpris SET dbus)
 
diff --git a/src/services/upower/CMakeLists.txt b/src/services/upower/CMakeLists.txt
index fd0da2af..ca87f6ae 100644
--- a/src/services/upower/CMakeLists.txt
+++ b/src/services/upower/CMakeLists.txt
@@ -37,7 +37,8 @@ qs_add_module_deps_light(quickshell-service-upower Quickshell)
 
 install_qml_module(quickshell-service-upower)
 
-target_link_libraries(quickshell-service-upower PRIVATE Qt::Qml Qt::DBus quickshell-dbus)
+target_link_libraries(quickshell-service-upower PRIVATE Qt::Qml Qt::DBus)
+qs_add_link_dependencies(quickshell-service-upower quickshell-dbus)
 target_link_libraries(quickshell PRIVATE quickshell-service-upowerplugin)
 
 qs_module_pch(quickshell-service-upower SET dbus)