目前,在我的 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接口。
几个变体:
相反,您可以有条件地附加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)
| 归档时间: |
|
| 查看次数: |
2551 次 |
| 最近记录: |