ウキウキしてSequoiaにバージョンアップしたらmakeができなくなっていた。
結論
pico-exampleをpullして最新のCMakeLists.txtを取得する
環境新しくなって動かなくなったら、CMakeListsを疑うのが間違いない。
pico-exampleディレクトリを別名でコピーして、cloneでまるっと入れ替える方が早いかも。
% git clone https://github.com/raspberrypi/pico-examples.git --branch master
コンパイル通らなくなったプロジェクトのCMakeLists.txtを更新する
案の定、バージョンやら設定やらが新しくなっているのでその部分をまんま反映する
Xcodeのバージョンをあわせる
Macでコンパイルするのに、Xcodeのツールを利用している。
なので、CMakeLists.txtを編集し、XcodeのSDKバージョンとかをあわせる必要がある。
sonoma時は、MacOSX14.5.sdkを利用していた模様(この記事の、かな〜り下に書いている「経緯」に記載しているエラーに含まれている)
cmake_minimum_required(VERSION 3.12) # Pull in SDK (must be before project) include(pico_sdk_import.cmake) include(pico_extras_import_optional.cmake) project(pico_examples C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) if (PICO_SDK_VERSION_STRING VERSION_LESS "2.0.0") message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.0.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") endif() set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR}) # If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS) set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000) endif() # Initialize the SDK pico_sdk_init() include(example_auto_set_url.cmake) function(add_subdirectory_exclude_platforms NAME) if (ARGN) if (PICO_PLATFORM IN_LIST ARGN) message("Skipping ${NAME} example which is unsupported on this platform") return() endif() foreach(PATTERN IN LISTS ARGN) string(REGEX MATCH "${PATTERN}" MATCHED "${PICO_PLATFORM}") if (MATCHED) message("Skipping ${NAME} example which is unsupported on this platform") return() endif() endforeach() endif() add_subdirectory(${NAME}) endfunction() ## Debug Option ------------------ 追加したとこ set(CMAKE_BUILD_TYPE Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") ## ------------------------------------------- ## MacOS Option Xcode ------------ 追加したとこ set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) ## ------------------------------------------- add_compile_options(-Wall -Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int -Wno-unused-function # we have some for the docs that aren't called ) if (CMAKE_C_COMPILER_ID STREQUAL "GNU") add_compile_options(-Wno-maybe-uninitialized) endif() ・ ・ ・ 以下省略
コンパイル環境構築の補足情報
pico-exampleをコンパイルするために、extrasも必要になる。(CMakeLists.txtに関連している)
面倒なので、最新のクローンを作成するコマンドをメモしておく
% git clone https://github.com/raspberrypi/pico-sdk.git --branch master % git clone https://github.com/raspberrypi/pico-examples.git --branch master % git clone https://github.com/raspberrypi/pico-extras.git --branch master
経緯
ここから下は、上記「結論」までの経緯
You have not agreed to the Xcode and Apple SDKs license. You must agree to the license below in order to use Xcode. Press enter to display the license:
翻訳すると・・・
あなたは、Xcode と Apple SDKs のライセンスに同意していません。Xcodeを使用するには、以下のライセンスに同意する必要があります。 エンターキーを押すとライセンスが表示されます:
となるので、Enterキーを叩くと
Agreeing to the Xcode and Apple SDKs license requires admin privileges, please accept the Xcode license as the root user (e.g. 'sudo xcodebuild -license').
こちらも翻訳すると
Xcode と Apple SDKs のライセンスに同意するには、管理者権限が必要です。root ユーザーとして Xcode のライセンスに同意してください (例 'sudo xcodebuild -license')。
なので、コマンド入れてみた
% sudo xcodebuild -license
するとこうなった
By typing 'agree' you are agreeing to the terms of the software license agreements. Any other response will cancel. [agree, cancel]
同意する」と入力すると、ソフトウェア使用許諾契約の条項に同意したことになります。それ以外の回答はキャンセルされます。[同意する、キャンセルする]
ので、 agree と入力すると
You can review the license in Xcode’s About window, or at: /Applications/Xcode.app/Contents/Resources/en.lproj/License.rtf
となりました。
ここまでできたら
% make -j8
とすると、先に進んだが下記のエラーが。
たぶん、CMakeLists.txtが新しくなっていると予想。
[ 1%] Built target bs2_default [ 2%] Performing build step for 'PioasmBuild' [ 10%] Building CXX object CMakeFiles/pioasm.dir/main.cpp.o c++: warning: no such sysroot directory: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk' [-Wmissing-sysroot] /Users/k/pico/pico-sdk/tools/pioasm/main.cpp:7:10: fatal error: 'iostream' file not found 7 | #include <iostream> | ^~~~~~~~~~ 1 error generated.
なので、CMakeLists.txtを新しく更新してみた。
cmake_minimum_required(VERSION 3.12) # Pull in SDK (must be before project) include(pico_sdk_import.cmake) include(pico_extras_import_optional.cmake) project(pico_examples C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) if (PICO_SDK_VERSION_STRING VERSION_LESS "2.0.0") message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.0.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") endif() set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR}) # If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS) set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000) endif() # Initialize the SDK pico_sdk_init() include(example_auto_set_url.cmake) function(add_subdirectory_exclude_platforms NAME) if (ARGN) if (PICO_PLATFORM IN_LIST ARGN) message("Skipping ${NAME} example which is unsupported on this platform") return() endif() foreach(PATTERN IN LISTS ARGN) string(REGEX MATCH "${PATTERN}" MATCHED "${PICO_PLATFORM}") if (MATCHED) message("Skipping ${NAME} example which is unsupported on this platform") return() endif() endforeach() endif() add_subdirectory(${NAME}) endfunction() ## Debug Option ------------------ 追加したとこ set(CMAKE_BUILD_TYPE Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") ## ------------------------------------------- ## MacOS Option Xcode ------------ 追加したとこ set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) ## ------------------------------------------- add_compile_options(-Wall -Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int -Wno-unused-function # we have some for the docs that aren't called ) if (CMAKE_C_COMPILER_ID STREQUAL "GNU") add_compile_options(-Wno-maybe-uninitialized) endif() ・ ・ ・ 以下省略