diff --git a/CMakeLists.txt b/CMakeLists.txt
index a6df2239ed9966c14056c33d49e2c7385695ad16..bc0778e762b4f4e88d5240a08c5b2ae0a9a1afb9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,16 +59,23 @@ target_link_libraries(Vivy PRIVATE lua)
 
 # Headers related things
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
-target_precompile_headers(Vivy PRIVATE
-    # Private Vivy headers
-    ${Vivy_INC}
-
-    # Qt headers
-    <QString>
-    <QList>
-    <QMap>
-    <QWidget>
-    <QIcon>
+target_precompile_headers(Vivy
+    PRIVATE
+        # Private Vivy headers
+        ${Vivy_INC}
+
+        # Qt headers
+        <QString>
+        <QList>
+        <QMap>
+        <QWidget>
+        <QIcon>
+
+        # STL headers
+        <memory>
+
+    REUSE_FROM
+        lua
 )
 
 # More options and warnings
diff --git a/vendor/lua-5.4.3/CMakeLists.txt b/vendor/lua-5.4.3/CMakeLists.txt
index fd82d56d6187183565007f071c9eeb251d79e202..a27db59c2ee3477bf2364616d3a2a183b1f8e0cb 100644
--- a/vendor/lua-5.4.3/CMakeLists.txt
+++ b/vendor/lua-5.4.3/CMakeLists.txt
@@ -6,7 +6,18 @@ if(WIN32)
 endif()
 
 file(GLOB Lua_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c")
+file(GLOB Lua_INC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
 list(REMOVE_ITEM Lua_SRC "src/lua.c" "src/luac.c")
 
-add_library(lua STATIC ${Lua_SRC})
+add_library(lua STATIC ${Lua_SRC} ${Lua_INC})
 target_include_directories(lua PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src/")
+target_precompile_headers(lua
+    PUBLIC
+        "${CMAKE_CURRENT_SOURCE_DIR}/src/lua.h"
+        "${CMAKE_CURRENT_SOURCE_DIR}/src/lualib.h"
+        "${CMAKE_CURRENT_SOURCE_DIR}/src/lauxlib.h"
+    PRIVATE
+        ${Lua_INC}
+)
+
+add_executable(lua-cli lua src/lua.c)