2015-11-10 28 views
0

我使用CLion編寫了一個使用CMake編寫系統的程序。儘管我喜歡它,但我遇到了以下問題:我想要有兩個可執行文件,一個是可以用於調試或發佈的「普通」可執行文件,另一個用於測試。測試可執行文件將包含我所有的單元測試。爲此,我編譯並安裝了一個名爲cmocka的庫,該庫看起來工作得很好。但是,我的主要目標是允許用戶在不安裝測試可執行文件的情況下使用CMakeLists.txt文件構建正常的可執行文件。只有在編譯單元測試時才需要安裝CMocka。這是我無法弄清楚該怎麼做的部分,因爲無論我做什麼,如果我想讓測試可執行文件具有libcmocka,那麼我無法在沒有libcmocka的情況下生成正常的可執行文件。使用CMake編譯測試可執行文件

以下是我的CMakeLists.txt文件,它的工作原理是它允許我編譯兩個可執行文件,但它不能完成上述要求。

cmake_minimum_required(VERSION 3.3) 
project(Crypto_Project) 

include_directories(/usr/local/include) 
find_library(CMOCKA_LIBRARY libcmocka.so.0) 

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lcmocka") 

#Normal executable 
set(SOURCE_FILES crypto_project.c ap_int.c ap_int.h) 
add_executable(Crypto_Project ${SOURCE_FILES}) 
target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY}) 

#Testing executable 
set(TESTING_SOURCE_FILES ap_int_tests.c ap_int.c ap_int.h) 
add_executable(Test_Crypto_Project ${TESTING_SOURCE_FILES}) 
target_link_libraries(Test_Crypto_Project ${CMOCKA_LIBRARY}) 

顯然,爲了不與cmocka然而編譯,我需要從正常的可執行文件中刪除target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY})以及沒有-lcmocka標誌編譯,我無法弄清楚如何獲得測試與-lcmocka和編譯正常可執行文件沒有它如果我從正常的可執行文件中刪除target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY}),它會給我以下錯誤:~/.CLion12/system/cmake/generated/5c245747/5c245747/Debug/Crypto_Project: error while loading shared libraries: libcmocka.so.0: cannot open shared object file: No such file or directory

我發佈到CLION論壇,但截至目前還沒有得到答覆:https://devnet.jetbrains.com/thread/475277?tstart=0我希望這裏有人可以幫忙。

預先感謝您。

回答

1

改變這一行

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lcmocka") 

這個

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 

CMake的應自動添加-lcmocka標誌,當你調用

target_link_libraries(Test_Crypto_Project ${CMOCKA_LIBRARY})