如何配置cmake以在默认情况下不获取可执行文件

如何配置cmake以在默认情况下不获取可执行文件,cmake,Cmake,我和cmake有一个小项目。我构建了一个库和一个可执行文件。在开发机器上,我还需要一个不能在其他机器/环境上构建的可执行文件 e、 g: 有人知道怎么处理吗?我不想总是构建单元测试 这很简单:通过引入选项/变量来保护可执行文件的创建 if (DEFINED WITH_UNIT_TEST) find_library (CUNIT_LIB cunit) include_directories (${Cunit_INCLUDE_DIRS} "${PROJECT_SOURCE_DIR}/src"

我和cmake有一个小项目。我构建了一个库和一个可执行文件。在开发机器上,我还需要一个不能在其他机器/环境上构建的可执行文件

e、 g:


有人知道怎么处理吗?我不想总是构建单元测试

这很简单:通过引入选项/变量来保护可执行文件的创建

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
,这样就可以构建
单元测试
目标,而默认情况下它永远不会被构建。有关替代方法,请参阅注释。

此任务有一个属性

你可以写:

set_target_properties(unit-test PROPERTIES EXCLUDE_FROM_ALL TRUE)

不要将
PROJECT\u SOURCE\u DIR
用于include。如果有人将您的项目添加为子目录,它将具有您不期望的价值。最好使用显式名称
\u SOURCE\u DIR
set(CMAKE\u C_FLAGS“-O2-Wall-Werror”)
如果用户想要定义自定义编译器标志,它将丢失。修复此用法:<代码> SET(CMACHY-CYFLAGS)${CMACHY-CY-FLAG}}-Off-WrError } /<代码>并且对于那些GUI爱好者,请考虑添加一个方便的切换,而不必记住确切的命令行开关。如顶级CMakeLists.txt所述。在这种情况下,我必须将检查
if(使用单元测试定义)
更改为
if(使用单元测试)
,因为该值总是使用
OFF
进行定义和初始化。是的,当然,如果按照@ComicSansMS的建议使用
选项
,则必须在未定义
的情况下进行检查,尽管如此,解决方案的逻辑是完全相同的。您也可以执行
add\u executable(单元测试从所有测试中排除)
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 ()
set_target_properties(unit-test PROPERTIES EXCLUDE_FROM_ALL TRUE)