2013-12-10 31 views
1

我有一個cmake的小項目。我建立一個lib和一個可執行文件。在開發機器上,我還需要一個不能在其他機器/環境上構建的可執行文件。如何配置cmake以獲取可執行文件不是默認的

例如爲:

<my-lib> 
| -- CMakeLists.txt 
| 
+ -- src/    -> build the lib/archive 
|  |-- lib.c 
|  |-- lib.h 
|  |-- CMakeLists.txt 
| 
+ -- tool    -> build the tool 
|  |-- tool.c 
|  |-- CMakeLists.txt 
| 
+ -- tests   -> build the unit tests 
|  |-- tests.c 
|  |-- CMakeLists.txt 

我加CMakeLists.txt所有目錄。還有一個add_executable的測試。現在單元測試可執行文件是默認生成的。但我想從默認目標中排除它。

CMakeLists.txttests

find_library (CUNIT_LIB cunit) 
include_directories (${Cunit_INCLUDE_DIRS} "${PROJECT_SOURCE_DIR}/src") 

set (CMAKE_C_FLAGS "-O2 -Wall -Werror") 

add_executable (unit-test tests.c) 

target_link_libraries (unit-test my-lib cunit) 

有沒有人暗示該如何處理呢?我不想總是建立單元測試!

+0

對包括不要使用'PROJECT_SOURCE_DIR'。如果有人將你的項目添加爲子目錄,它將具有你不期望的價值。這是更好地使用明確的名字' _SOURCE_DIR'或[CMAKE_CURRENT_LIST_DIR(http://www.cmake.org/cmake/help/v2.8.12/cmake.html#variable:CMAKE_CURRENT_LIST_DIR) – 2013-12-10 19:56:55

+0

'設置(CMAKE_C_FLAGS「-02 - Wall -Werror「)'如果用戶想定義自定義編譯器標誌,它將會丟失。要解決這一點:'設置(CMAKE_C_FLAGS 「$ {} CMAKE_C_FLAGS -Wall -O2 -Werror」)' – 2013-12-10 19:57:56

回答

1

這是非常簡單的:通過引入一個選項/變量保護可執行文件的創建。

if (DEFINED WITH_UNIT_TEST) 
    find_library (CUNIT_LIB cunit) 
    include_directories (${Cunit_INCLUDE_DIRS} "${PROJECT_SOURCE_DIR}/src") 

    set (CMAKE_C_FLAGS "-O2 -Wall -Werror") 

    add_executable (unit-test tests.c) 

    target_link_libraries (unit-test my-lib cunit) 
endif() 

現在調用CMake的時候,一個人必須要明確指定-DWITH_UNIT_TEST,使unit-test目標是建立,而默認情況下它不會被建立。有關其他方法,請參閱評論。

+0

而對於那些GUI愛好者在那裏:考慮添加[選項](http://www.cmake.org/cmake /help/v2.8.12/cmake.html#command:option)以方便切換,而不必記住確切的命令行開關。 – ComicSansMS

+0

我添加了「選項(WITH_UNIT_TEST」啓用構建單元測試可執行文件「OFF」),如觀察到的頂層CMakeLists.txt。在這種情況下,我必須將if(DEFINED WITH_UNIT_TEST)檢查更改爲if(WITH_UNIT_TEST),因爲該值始終是用「OFF」定義和初始化的。 – user3087662

+0

是的,當然,如果按照@ComicSansMS的建議去使用'option',那麼您必須在不使用'DEFINED'的情況下檢查它,但解決方案的邏輯完全相同。 –

相關問題