14

Mac OS X SDK を指定して CMake でビルドする方法を知っている人はいますか? 私は検索しましcmake mac "base sdk"たが、これは何も見つかりませんでした。

CMake を使用して Unix メイクファイルを生成しています。

アップデート

10.6 のインストールで/Developer/SDKsは、次のように表示されます。

  • MacOSX10.4u.sdk
  • MacOSX10.5.sdk
  • MacOSX10.6.sdk

おそらく、CMake にこれらのパスの 1 つを何らかの方法でコンパイラに渡すようにさせることができますか?

また、私の 10.7 インストールには次のものしかありません。

  • MacOSX10.6.sdk
  • MacOSX10.7.sdk

これは、これらのプラットフォーム用にしかビルドできないということですか?

更新 2

くそー、私は実際にXcodeを使用していないことに気付きました-したがって、これはいくつかの回答に影響を与える可能性があります. また、私は現在、Mac OS X 10.8 開発者プレビューを試しています (奇妙な結果がいくつかあります。私の回答を参照してください)。

4

3 に答える 3

29

sakra の有効な回答 (CMake が動作すると想定されている限り有効) を試した後、失敗しましたが、調べてみると--sysroot、コンパイラにフラグを指定すると、正しい SDK を使用しているように見えます!

ただし、10.7 に対してコンパイルすると、次のエラーが表示されるようになりました (10.8 では表示されません)。

Undefined symbols for architecture i386:
  "_NXArgv", referenced from:
      execSelfNonDaemonized() in libarch.a(CArchDaemonUnix.o)
      CArchDaemonUnix::daemonize(char const*, int (*)(int, char const**)) in libarch.a(CArchDaemonUnix.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/synergyc] Error 1
make[1]: *** [src/cmd/synergyc/CMakeFiles/synergyc.dir/all] Error 2
make: *** [all] Error 2

注: CArchDaemonUnixSynergy (私が取り組んでいるオープン ソース プロジェクト) のクラスです。

アップデート:

10.6 のインストールでこれを試してみたところ、10.5 用にコンパイルしようとするとリンカー エラーが発生しましたMACOSX_DEPLOYMENT_TARGET。環境変数も指定する必要があることがわかりました。

とにかく、10.7用にコンパイルするためにMountain Lion(OSX 10.8)で実行するときに私がやっていることは次のとおりです。

コマンドライン:

MACOSX_DEPLOYMENT_TARGET=10.7

cmake -G "Unix Makefiles" -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.7.sdk/ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 ../..

CMakeLists.txt:

set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")

これが誰かに役立つことを願っています!:-)

于 2012-05-11T23:41:16.183 に答える
3

CMAKE_OSX_SYSROOTプロジェクトの構成時に、選択したSDKに変数を設定できます。例えば:

cmake -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.4u.sdk/ ..

こちらのドキュメントを参照してください。

また、2.8.8より前のCMakeバージョンはXcode4.3をサポートしていないことに注意してください。

于 2012-04-16T07:32:27.117 に答える