【发布时间】:2015-11-11 01:55:34
【问题描述】:
我正在使用 CLion 用 C 语言编写一个程序,而 CLion 又使用 CMake 作为其构建系统。虽然到目前为止我喜欢它,但我遇到了以下问题:我想要两个可执行文件,一个“正常”应该可以构建用于调试或发布,另一个用于测试。测试可执行文件将包括我所有的单元测试。为此,我编译并安装了一个名为 cmocka 的库,它似乎工作得很好。但是,我的主要目标是允许人们使用 CMakeLists.txt 文件构建正常的可执行文件,而无需安装测试可执行文件。只有当他们想要编译单元测试时才需要安装 CMocka。那是我无法弄清楚该怎么做的部分,因为无论我做什么,如果我希望测试可执行文件具有 libcmocka,那么我无法在没有 libcmocka 的情况下构建正常的可执行文件。
以下是我的 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 我希望这里的人能帮忙。
提前谢谢你。
【问题讨论】:
标签: c unit-testing cmake