追加到目标链接库

Luc*_*uca 3 cmake

目前,在我的 CMake 文件中,我根据是否找到 OpenMP 执行以下操作:

if(OpenMP_CXX_FOUND)
    target_link_libraries(myapp PRIVATE lib_1 lib_2 OpenMP::OpenMP_CXX PUBLIC io_lib)
else(OpenMP_CXX_FOUND)
    target_link_libraries(myapp PRIVATE lib_1 lib_2 PUBLIC io_lib)
Run Code Online (Sandbox Code Playgroud)

也许,我在这里很挑剔,但这看起来有点难看。我想知道是否有一种规范的方法可以做到这一点,并且不会导致丑陋的配置。也许,像附加到库列表之类的东西可能会更干净,但我不知道如何访问该PRIVATE接口。

squ*_*les 5

几个变体:

相反,您可以有条件地附加OpenMP::OpenMP_CXX目标:

target_link_libraries(myapp PRIVATE lib_1 lib_2 PUBLIC io_lib)
if(OpenMP_CXX_FOUND)
    target_link_libraries(myapp PRIVATE OpenMP::OpenMP_CXX)
endif()
Run Code Online (Sandbox Code Playgroud)

target_link_libraries因为对同一目标的连续调用将按调用的顺序附加项目。

或者,您可以使用条件生成器表达式将此逻辑简化为一行:

target_link_libraries(myapp 
    PRIVATE lib_1 lib_2 $<IF:${OpenMP_CXX_FOUND},OpenMP::OpenMP_CXX,> 
    PUBLIC io_lib
)
Run Code Online (Sandbox Code Playgroud)