問題タブ [conditional-compilation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 「#ifdef」を使用すると、Visual Studio が非アクティブなコード ブロックを誤ってマークする
私のプロジェクトにはたくさんの#ifdefs
. これら#ifdef
の で使用されるマクロは、通常、'/D'
オプションを使用してコマンド ラインを介して渡され、さまざまなビルド構成を取得します。Visual Studio は、これらのマクロが定義されていないと誤って想定し、これら#ifdef
の 内に存在するコード ブロックをグレー表示します。問題は構文の強調表示ではありません。グレー表示されたコードをオプションから色付きのコードに変えることができます。主な問題は、その中に存在する関数の関数定義に移動できないことです#ifdef
。Visual Studioのヒント ファイルについて読んでみましたが、うまくいきませんでした。
誰でもこの問題で私を助けることができますか? Visual Studio 2008 を使用しています。
java - コンパイル/実行時にアプリケーションの一部を条件付きで削除するにはどうすればよいですか?
組み込みデバイスで実行されるJavaアプリケーションがあります。さまざまなデバイスがさまざまなバージョンのデバイスSDKを実行するため、最大5つの異なるデバイスSDKの組み合わせに対してビルドする必要があります。
これらの組み合わせの1つは、既存のオブジェクトの特定のメソッドをサポートせず、SDKから別のオブジェクトを完全に省略します。
このメソッドとオブジェクトをプログラムで使用していますが、特定の構成でのみ使用しているため、それをサポートしていないデバイスで別の構成にフォールバックしたいと思います。
コンパイル時または実行時にこのフォールバック動作を実行できれば幸いです。
このコードを条件付きで削除する最も簡単な方法は何でしょうか?
それ以外の点ではコードは同じなので、2つのSDK用に2つの別々のコードブランチを作成したくないと思います。
Antスクリプトを使用してアプリケーションをビルドします。
私のアプリケーションは、関連する場合、かなり古いバージョンのJDK(1.1.8 / 1.2)に対してビルドする必要があります。
c# - XNA-ターゲットプラットフォームに基づいて条件付きでオブジェクトを含める
WindowsとXboxの両方に対応したXNA4.0アプリを構築しています。
Windowsバージョンでは、IronPythonと、コンパクトフレームワークでサポートされていないいくつかのCLR/DLRアセンブリを参照するデバッグコンソールがあります。それらのアイテムを参照する部分的なクラスもいくつかあります。
互換性を維持するために、xboxプロジェクトから参照を削除できることを知っています。ただし、それらのアイテムを参照するクラスも削除する必要があります。問題は、それらのクラスがそれらを必要とする他のクラスによってインスタンス化されることですが、Windowsの場合のみです。
この難問に対する明らかな解決策は、サポートされていないクラスへの呼び出しを#if
プリプロセッサディレクティブでラップすることです。
また、クラス全体/部分クラスを同じ方法でラップして、コンパイルされないようにすることもできると思います。これを行うためのより良い方法はありますか?プリプロセッサディレクティブでコードをペッパーするのは避けたいです。
また、ソリューション全体で条件を指定する方法が見つからないようです。
c# - C# でノーオペレーションの結果を得るための条件付きコンパイル手法
C#で特定の関数呼び出しをno-opsに置き換える良い方法を(リフレクションまたは特別な属性を介して)知っている人はいますか?
基本的に、私がやろうとしていることはこのようなものです
私のコードのいたるところに多くのifdefをまき散らすことなく。これ (私の StopWatch クラス) を null オブジェクト パターンに置き換えて、条件付きで null オブジェクトを割り当てることもできますが、コード内で厳密に no-op と比較すると、これはまだ理想的ではありません。ここではコード パスの長さが非常に重要です。タイミングの結果を収集しようとしていないときは、op がまったくないため、読みやすさをいくらか犠牲にしたいと思います。
C# で StopWatch クラスまたはメソッドにタグを付けて、コンパイラによって評価されたときにコードを出力しないようにする方法があるかどうかは誰にもわかりませんか?
c# - VS2008: 定義を含む複数のビルド構成が期待どおりに機能しない
複数のバージョンで維持する基本ライブラリがあります。別のバージョンで作業する必要があるときはいつでも、SVN の切り替えを行います。
テスト アプリケーション ソリューションの複数のバージョンを持っていないため、バージョンごとに、バージョン固有のコードをテストに含めることができるように、バージョンのシンボルを定義する複数のソリューション/プロジェクト構成を実行できると考えました。
現在、テスト アプリケーション ソリューションには次のビルド構成があります: Debug、Release、DebugV10、ReleaseV10、DebugV15、ReleaseV15。*V10 および *V15 構成では、バージョン固有のテスト コードを持つ 2 つのプロジェクト用に、対応する *V10 および *V15 PROJECT 構成を作成して選択しました (すべてのプロジェクトではなく、ほとんどがソリューションで通常のデバッグ/リリース構成を実行します -Vx構成)。
これらのプロジェクト構成では、対応する条件付きコンパイル シンボル (VERSION10 および VERSION15) を入力しました。
プロジェクトの私のコードでは、次のようになります
しかし、明らかにVSはシンボルを認識していません。単純な #if DEBUG が機能しなくなった場合でも、すべての DEBUG 定数の定義がすべての Debug* プロジェクト構成でチェックされます。
これは既知のことですか?私はそれについて何ができますか?
qt - ifdef でラップされた Qt シグナル
私の Qt プロジェクトは、Linux 専用のライブラリにリンクしています。プロジェクトが Linux で実行されている場合、そのライブラリで定義されたタイプを使用して、イベントでシグナルを発生させたいと考えています。ただし、複雑なのは、プロジェクトも Windows でビルドする必要があることです。明らかに、このシグナルとそれをキャッチするスロットは Windows には存在しませんが、それで問題ありません。ただし、Qt の moc ツール#ifdef __linux__
がシグナルを発するコードの周りに存在することを認識できないという問題を見つけています。私のコードは次のようになります。
[SomeFile.h]
[サムファイル.cpp]
これを g++ でコンパイルしようとすると、次のエラーが発生します。
SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)
moc と #ifdefs をうまく連携させる方法はありますか?
windows - Windows Server 2008 と Windows Server 2008 R2 間の条件付きコンパイル
w2k8 から R2 のいくつかの OS 構造 (vds プロバイダーなど) に変更があります。
では、ソースを適切なバージョンに条件付きでコンパイルするにはどうすればよいでしょうか? または、R2 と w2k8 用に完全に異なるプロジェクトを出荷する必要がありますか。
_
可能であれば、_WIN32_WINNT や WINVER のようなプリプロセッサの ifdef フラグが必要です。
SDK を使用してバージョンを検出することは避けたいです。しかし、フラグがない場合 (私のグーグル スキルによると)、SDK を介して OS バージョンを見つける方法を親切に提案してください。
cocoa - CocoaアプリのXcodeでMACOSX_DEPLOYMENT_TARGETを使用した条件付きコンパイル
Cocoaアプリケーションでは、次のような条件付きコンパイルを使用したいと思います。
私の望みは、これにより、removeFileAtPathに関するコンパイラの警告が回避されることです。MACOSX_DEPLOYMENT_TARGET= 10.6の場合、その行をコンパイルするべきではないため、非推奨になります。
動作しません。
MACOSX_DEPLOYMENT_TARGET = 10.6の場合、removeFileAtPath:が非推奨になるという警告が表示されます。ただし、その行をコンパイルするべきではないので、非推奨のメソッドがあることを警告するべきではありません。
(プロジェクトビルド設定とターゲットビルド設定の両方でMACOSX_DEPLOYMENT_TARGETを設定しています。BASE_SDKを10.6に設定し、両方でGCC 4.2も指定しています。)
私は何が間違っているのですか?条件付きコンパイルについて根本的な誤解がありますか?
vb.net - vb.net のグローバル条件定義 (#const) ステートメント
複数のソース ファイル間でアクセスできる asp/vb.net アプリで、#const などの条件付き定義を定義する方法はありますか?
たとえば、
ただし、その値を 1 か所でのみ変更できるようにします。
アドバイスをありがとう。
visual-studio - Visual Studio - ビルドごとにすべてのプロジェクト ファイルをコンパイルしないようにする方法は?
Visual Studio 2010 で Visual C++ ソリューションをビルドするたびに、プロジェクト全体 (ソリューション全体ではない) が再コンパイルされます。
VSが変更されたファイルと依存ファイルのみをコンパイルするようにするには、どこかにフラグまたは構成が必要です。それはどこにある?
更新:
- My project's configuration properties\C/C++\Code Generation\Enable Minimal Rebuild に「Yes (/Gm)」を設定します。F7 ですべてのプロジェクトのファイルをコンパイルします。