在CMake中使用源文件开关的最佳方法是什么

时间:2018-08-21 09:20:20

标签: cmake

我想建立一个共享库。该库有一个源目录和一些子目录。

<div class="openbutton">
    <a href="Footersite">
       <p style="color: white; font-size: 17px;">Contact us</p>
    </a>
</div>

因此,我想将lib添加到项目中,只希望将lib与功能1建立并链接。对于其他构建,我想使用feature1.c和feature2.c等构建它。 ...

我可以在cmake中使用哪种机制。在Eclipse CDT中,它类似于 资源配置=>删除或添加以构建。

非常感谢 Mathias

2 个答案:

答案 0 :(得分:0)

您正在寻找在配置时传递给cmake的选项。您可以这样定义它们:

option(WITH_FEATURE1 "Description of awesome feature (1)" ON)
option(WITH_FEATURE2 "Description of awesome feature (2)" OFF)

然后稍后在您的CMakeLists.txt中查询它们,

if(${WITH_FEATURE1})
    add_subdirectory(sub1)
endif()

现在,您的构建可以进行如下配置。

cmake -D WITH_FEATURE1=OFF -D WITH_FEATURE2=ON

,而在调用上面的cmake方法时指定了默认选项(在不使用这些参数的情况下调用option时)。

答案 1 :(得分:0)

我建议使用object libraries

# first solution
add_library(feature1 OBJECT sub1/feature1.c)
add_library(feature2 OBJECT sub1/feature2.c)
add_library(feature3 OBJECT sub1/feature3.c)
if(conditions)
    add_library(my_shared_library SHARED $<TARGET_OBJECTS:feature1>)
elseif(other_condition)
    # other version
endif()

# second solution
add_library(my_shared_lib SHARED
    common.c
    $<$<BOOL:${WITH_FEATURE1}>:sub1/feature1.c>
    $<$<BOOL:${WITH_FEATURE2}>:sub2/feature2.c>
)