Как связать с целью в CMake, но частично изменить некоторые свойства локально? - PullRequest
0 голосов
/ 10 марта 2020

Я нахожусь на Visual Studio 2017, Windows 10, CMake 3.16.

У меня есть ситуация, когда у меня есть проект, который состоит из файлов cuda .cu, которые ссылаются на исходную библиотеку на основе c ++ через CMake. Для этой вышестоящей библиотеки цель состоит из макроса WINDOWS_DISABLE_ALL_WARNING=__pragma(warning(push,0)), который сохраняется в ее цели cmake через INTERFACE_COMPILE_DEFINITIONS. Основная проблема в том, что nv cc не может разобрать это из-за запятой, мне на самом деле нужно изменить его на WINDOWS_DISABLE_ALL_WARNING=__pragma(warning(push\,0)) для его компиляции, в противном случае появится следующее сообщение об ошибке

nvcc fatal   : A single input file is required for a non-link phase when an outputfile is specified

но я не смог найти правильный способ сделать это в cmake. Ниже приведены минимальные примеры моих неудачных попыток

cmake_minimum_required(VERSION 3.16)

project(sample)

add_library(aaatarget aaa.cpp)

target_compile_definitions(aaatarget PUBLIC MYMACRO="aaa")

add_executable(bbbtarget bbb.cpp)

target_link_libraries(bbbtarget aaatarget)

# this works but it will mess up other targets that links to aaatarget that actually wants 
# MYMACRO to be it's original aaa
set_target_properties(aaatarget PROPERTIES INTERFACE_COMPILE_DEFINITIONS MYMACRO="bbb")

# ideally I want to just change bbbtarget to make it work but none of the below works
set_target_properties(bbbtarget PROPERTIES INTERFACE_COMPILE_DEFINITIONS MYMACRO="bbb")
set_target_properties(bbbtarget PROPERTIES INTERFACE_COMPILE_OPTIONS MYMACRO="bbb")
set_target_properties(bbbtarget PROPERTIES COMPILE_DEFINITIONS MYMACRO="bbb")
set_target_properties(bbbtarget PROPERTIES COMPILE_OPTIONS MYMACRO="bbb")

# this has the potential to solve it for my specific use case but unfortunately COMPILE_LANGUAGE
# doesn't work on visual studio... otherwise, I could request the upstream vendor to make this change
target_compile_definitions(aaatarget PUBLIC "$<$<COMPILE_LANGUAGE:CXX>:MYMACRO=\"aaa\"")

Может кто-нибудь сказать мне, как связать с целью в CMake, но частично изменить некоторые свойства локально? Лучшее решение - NVIDIA fix nv cc, поэтому он может правильно анализировать запятую, как cl, но было бы неплохо обойти это сейчас, прежде чем это произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...