Hi,
I'm building hpx without cuda, and in examples/qt/, tools/ and tools/inspect/
cmake errors out with the following error:
CMake Error at examples/qt/CMakeLists.txt:26 (target_link_libraries):
Policy CMP0023 is not set: Plain and keyword target_link_libraries
signatures cannot be mixed. Run "cmake --help-policy CMP0023" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
The keyword signature for target_link_libraries has already been used with
the target "qt_exe". All uses of target_link_libraries with a target must
be either all-keyword or all-plain.
The uses of the keyword signature are here:
* cmake/HPX_SetupTarget.cmake:202 (target_link_libraries)
This happens AFAICT because in HPX_SetupTarget.cmake there is the following
code:
if(NOT HPX_WITH_CUDA) # Cuda needs plain target_link_libraries() signature
target_link_libraries(${target} PUBLIC ${hpx_libs} ${target_DEPENDENCIES})
else()
target_link_libraries(${target} ${hpx_libs} ${target_DEPENDENCIES})
endif()
i.e. without CUDA the "PUBLIC" signature of target_link_libraries() is used.
Now in the mentioned directories target_link_libraries() is used without
PUBLIC/PRIVATE/INTERFACE keywords.
This is (by default) not allowed (see here https://cmake.org/cmake/help/v3.8/
policy/CMP0023.html ).
I could make it work for me by adding "PRIVATE" (or "PUBLIC") to the
respective target_link_libraries() calls, e.g. in examples/qt/.
But I guess this will break then in the other case, when building with CUDA.
The "PUBLIC" was added last November without much explanation:
https://github.com/STEllAR-GROUP/hpx/commit/
fb1fc68ea82a4623b5644f15f1d508fa9733f442
In src/CMakeLists.txt this is handled by duplicating the whole
target_link_libraries()-calls in an if(WITH_CUDA) branch.
I see the following options to make it always work:
1. add something like hpx_target_link_libraries(), which wraps
target_link_libraries() and contains this if(WITH_CUDA) - maybe a bit overkill
?
2. set a HPX_TLL_KEYWORD variable at the top level and use that then
everywhere in the target_link_libraries() calls:
set( HPX_TLL_KEYWORD)
if (NOT HPX_WITH_CUDA)
set(HPX_TLL_KEYWORD PUBLIC)
endif()
3. add the if(WITH_CUDA) in the three CMakeLists.txt which have a problem
right now.
4. remove the "PUBLIC" from hpx_setup_target().
But I guess there was a reason why it was added ?
5. add PUBLIC also with CUDA, but I guess there is a reason it is not there ?
I think my favourite is option 2, add a keyword-variable.
Alex
_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users