2010-09-23 35 views
2

我需要有條件地編譯代碼的幾個部分,具體取決於系統中是否存在一些庫。它們的存在是在CMake配置階段確定的,我打算使用預處理器定義(如#ifdef(LIB_DEFINED)... #endif)告訴編譯器結果。add_definitions vs. configure_file

我知道兩種可能性如何實現在CMake的:

  1. Ceate這些預處理器定義模板文件,通過它在CMakeLists到configure_file(),最後包含(#include)生產的配置文件中的每個源文件
  2. 直接在CMakeLists中使用add_definitions(-DLIB_DEFINED)。

第一種方法對我來說似乎更加複雜,那麼是否有任何優勢取代第二種方法(例如避免一些可移植性問題)?

回答

1

根據您使用的庫的數量,如果遵循第二種方法,編譯器的調用將變得很大。所以我會說對於只有2-3個可選庫的小項目採用方法2,但如果它更接近10,那麼最好遵循方法1,以便編譯輸出保持可讀性。

1

方法1通常是可取的,因爲您也可以將該文件安裝爲配置標題,允許使用/鏈接到您的代碼的其他項目使用相同的設置。也可以檢查文件並查看項目的配置方式。這兩種方法都可行,偶爾add_definitions是更好的方法(一個或幾個定義,在初始編譯後保留這些定義沒有優勢)。

+0

謝謝你,還有fschmitt - 現在第一種方法在整體上看起來更清潔,所以我會使用它。 – 2010-09-25 11:18:20

相關問題