$(EFFECTIVE_PLATFORM_NAME) ?

Feb 22, 2015 at 4:29 AM
cmakems v3.0.20140929
(Likely this has already been fixed.)

Repro:
  1. Build with "-DCMAKE_VS_EFFECTIVE_PLATFORMS=Win32;x64;ARM"
  2. Open resulting VS2013 sln
  3. Look at any projects' properties under "General", "Output Directory"
Actual Results:
"<path>\obj\winrt\src\Release$(EFFECTIVE_PLATFORM_NAME)\"
$(EFFECTIVE_PLATFORM_NAME) isn't defined

Expected Results:
"<path>\obj\winrt\src\Release$(Platform)\"
Or $(EFFECTIVE_PLATFORM_NAME) to be defined == $Platform


This results in the libs for all CPU architectures to be in one folder, often overwriting each other. When I (rarely) do manual builds across CPU architectures, I always have to carefully do a clean rebuild or I end up with architecture mismatches. When I manually build an appxupload for each architecture for submission to the Store, I hit this issue.
Coordinator
Feb 23, 2015 at 6:19 PM
Thanks for reporting this, I'll take a look and post an update.
Coordinator
Feb 23, 2015 at 8:50 PM
Hi Ted,

It looks like you also have the XCODE platform define set: CMAKE_XCODE_EFFECTIVE_PLATFORMS this is what's causing the issue. The way I've plumbed it through, only one of these can be set.

Can you make the define dependent on the build environment? i.e. Only define CMAKE_XCODE_EFFECTIIVE_PLATFORMS when generating for XCode and CMAKE_VS_EFFECTIVE_PLATFORMS when generating for VisualStudio?
Feb 24, 2015 at 4:57 AM
Thanks yet again.

I put an "IF(APPLE)" around the "set(CMAKE_XCODE_EFFECTIIVE_PLATFORMS" and now "Output Directory" has "$(Platform)" instead of "$(EFFECTIVE_PLATFORM_NAME)".

Another odd thing about CMAKE_VS_EFFECTIVE_PLATFORMS is that if I set it in a CMakeLists.txt it doesn't take effect. I have to set it on the commandline with -D. I even tried setting it right after my "cmake_minimum_required(VERSION 3.0)". It's surprising but not a big deal once I figured it out. Just an issue for anyone who hasn't figured it out yet.