2016-10-24 16 views
6

私はWindowsでCMAKE 3.4.3を使用しています。私がやろうとしていることは、CMAKEにパスを設定し、それを私のC++ファイルで参照しようとしています。次のように私が試した何コードからのCMAKE変数を参照する

されました:CMakeLists.txtで

は今

ADD_DEFINITIONS(-DNV12_2_ARGB_PTX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ptx") 

ファイル、私が試してみて、次のように私のC++ファイルから、それを参照してください。

#ifdef NV12_2_ARGB_PTX_DIR 
    #define PTX_DIR D_NV12_2_ARGB_PTX_DIR 
#endif 

と私はそれを参照しようとすると:

std::cout << PTX_DIR << std::endl; 

私はエラーを取得する:

'C:/Users/Luca/project/src/lib/ptx': No such file or directory 

また、Visual Studioのインテリセンスは文句:

IntelliSense: identifier "PTX_DIR" is undefined 

それは、この変数を使用してファイルを開くために望んでいる理由はわからない...

+0

'C:/ Users/Luca/project/src/lib/ptx'というパスがマシンに存在しますか?ところで、あなたはそのようなタスクのために[configure_file](https://cmake.org/cmake/help/latest/command/configure_file.html)を検討するかもしれません – wasthishelpful

+0

パスは存在しますが、なぜこれが有効なパスである必要がありますか分かりません?これは任意の値を持つことができる変数です。私はまだこのファイル操作を試みていません。 – Luca

答えて

8

問題はadd_definitionsの使用にあります。コンパイラのコマンドラインに追加引数として${CMAKE_CURRENT_SOURCE_DIR}/ptxという値を渡すと、コンパイラはおそらくコンパイルするソースファイルとして解釈します。呼び出された完全なコマンドラインを確認してください。

おそらく、この意図:あなたはすべての方法ダウンC++にそれらを得るために引用符をエスケープで遊んでする必要があり

add_definitions(-DNV12_2_ARGB_PTX_DIR="${CMAKE_CURRENT_SOURCE_DIR}/ptx") 

注意を。また、configure_file()を使用することもできます。

+0

ああ、そうです!それはうまくいった。私は 'add_definitions'と' SET'コマンドで遊んでいて、等号は途中で失われました! – Luca

+0

9時間以内に8回upvotes。明らかに素晴らしい答え。そして大きな質問ですが、7人はタイプミスについての質問が好きです。 – usr1234567

+1

@ usr1234567 CMakeは静的な構文とベストプラクティスのチェッカー、広範囲な入門的で説明的な非参照ドキュメントを提供し、一度その出力が多くのビルドシステムファイルに散在するビルド設定より簡単にアクセスできるようになると、それまでは、CMakeは使い勝手の良いツールですが、「誤植」とその結果が見つからず、理解しにくく、そのような質問を有効にすることができます。実際にはこれが誤字ではなく、 'add_definitions()'の誤解が多いことは言うまでもありません。 – Angew

関連する問題