Closed6
Swift with CMake on Windows
CMakeを利用したプロジェクトでコード補完を効かせるためにはcompile_commands.json
というファイル別の対応関係を列挙したものを生成してあげるとsourcekit-lspで読み込める
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
[
{
"directory": "S:/src/apple-swift-cmake-examples/2_executable_library/build",
"command": "C:\\Users\\arasa\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin\\swiftc.exe -j 12 -num-threads 12 -c -parse-as-library -static -emit-module -emit-module-path lib\\factorial.swiftmodule -module-name factorial -module-link-name factorial -Onone -g -incremental -output-file-map lib\\CMakeFiles\\factorial.dir\\Debug\\output-file-map.json S:\\src\\apple-swift-cmake-examples\\2_executable_library\\lib\\factorial.swift",
"file": "S:\\src\\apple-swift-cmake-examples\\2_executable_library\\lib\\factorial.swift",
"output": "lib\\CMakeFiles\\factorial.dir\\factorial.swift.obj"
},
{
"directory": "S:/src/apple-swift-cmake-examples/2_executable_library/build",
"command": "C:\\Users\\arasa\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin\\swiftc.exe -j 12 -num-threads 12 -c -Onone -g -incremental -output-file-map src\\CMakeFiles\\factorials.dir\\Debug\\output-file-map.json -I S:\\src\\apple-swift-cmake-examples\\2_executable_library\\build\\lib S:\\src\\apple-swift-cmake-examples\\2_executable_library\\src\\main.swift",
"file": "S:\\src\\apple-swift-cmake-examples\\2_executable_library\\src\\main.swift",
"output": "src\\CMakeFiles\\factorials.dir\\main.swift.obj"
}
]
FoundationDBなどでもこのC++ & SwiftでCMakeを利用して開発をするトピックがあり、コード補完を効かせるために同じことをしている
SPMで利用しているプロジェクト自体にCMakeLists.txtがあったりする場合にはそのままFetchContentからパッケージの利用ができたりする、swift-collectionやswift-numericなどはこの構造に対応している
WindowsだとVS Project generatorはcompile_commands.jsonに対応してないのでNinja経由でやろう
compile_command.jsonを直接指定できるようにしないといけないのか…?という当たり前の疑問が上記のフォーラムで解決してPRまで出されていた、今普通にWindowsで使える --compilation-db-search-path
はこの課題を実際に解決するためのオプションだった
FetchContentってなーんだ?
外部の依存で、例えばGitHubなどでホスティングされているCMake対応のコードがある場合に取得して呼び出せるようにするものっぽい
このスクラップは2024/04/13にクローズされました