2008-11-21 47 views
7

Tôi có một vài điều mà tôi không thể tìm thấy một cách tốt để thực hiện trong Visual Studio:Complex được xây dựng trong Visual Studio

  1. Pre-xây dựng các bước kích hoạt một bộ tạo mã để tạo ra một số file nguồn mà sau này được biên soạn . Điều này có thể được giải quyết ở mức giới hạn bằng cách thêm các tệp trống vào dự án (sau này được thay thế bằng các tệp được tạo thực), nhưng nó không hoạt động nếu tôi không biết tên và/hoặc số tệp nguồn được tạo tự động. Tôi có thể dễ dàng giải quyết nó trong GNU make sử dụng $(wildcard generated/*.c). Làm thế nào tôi có thể làm một cái gì đó tương tự với Visual Studio?

  2. Tôi có thể ngăn sự kiện trước khi xây dựng/sau xây dựng đang chạy nếu các tệp không cần phải sửa đổi ("make" hành vi) không? Cách giải quyết hiện tại là viết một kịch bản trình bao bọc sẽ kiểm tra dấu thời gian cho tôi, nó hoạt động, nhưng hơi phức tạp.

  3. Cách tốt nhất để tìm thư viện bên ngoài và tiêu đề được cài đặt bên ngoài VS là gì? Trong trường hợp * nix, chúng thường được cài đặt trong đường dẫn hệ thống hoặc được đặt với autoconf. Tôi cho rằng tôi có thể chỉ định đường dẫn với macro do người dùng xác định trong cài đặt dự án, nhưng đâu là nơi tốt để đặt các macro này để chúng có thể dễ dàng tìm thấy và điều chỉnh?

Chỉ cần được rõ ràng, tôi biết rằng Windows tốt hơn xây dựng hệ thống tồn tại (CMake, SCons), nhưng họ thường tạo ra các file dự án VS mình, và tôi cần phải tích hợp dự án này thành hiện VS xây dựng hệ thống, vì vậy đó là mong muốn rằng tôi có chỉ đơn giản VS dự án tập tin, không phải là những người thân tạo ra.

Trả lời

5
  1. Nếu bạn cần thực hiện hành vi và quen với nó, bạn có thể tạo visual studio makefile projects và đưa chúng vào dự án của bạn.

  2. Nếu bạn muốn ít clunky, bạn có thể viết studio trực quan macros và tùy chỉnh xây dựng sự kiện và gắn chúng vào các callbacks/hooks cụ thể.

  3. Bạn có thể thử một số thứ như workspacewhiz để cho phép bạn thiết lập biến môi trường cho dự án của mình, ở định dạng tệp có thể được đăng ký. Sau đó, người dùng có thể thay đổi chúng cục bộ.

+1

Đối với điểm 3. tệp '.vsprops' được giới thiệu bắt đầu bằng VS2005 là tùy chọn tốt hơn. – 0xC0000022L

1

(1). Tôi không biết câu trả lời đơn giản cho vấn đề này, nhưng có cách giải quyết:

1a. Nếu nội dung của các tệp được tạo không xung đột (nghĩa là không có các mã định danh tĩnh phổ biến, v.v.), bạn có thể thêm vào dự án một tệp duy nhất, chẳng hạn như AllGeneratedFiles.c và sửa đổi trình tạo của bạn để nối thêm tệp #include "được tạo /. c "vào tập tin này khi nó tạo ra/file.c.

1b. Hoặc bạn có thể tạo một dự án dựa trên makefile riêng biệt cho các tệp được tạo và xây dựng chúng bằng cách sử dụng nmake.

(2). Sử dụng quy tắc xây dựng tùy chỉnh thay vì sự kiện sau xây dựng. Bạn có thể thêm quy tắc xây dựng tùy chỉnh bằng cách nhấp chuột phải vào tên dự án trong Solution Explorer và chọn Quy tắc xây dựng tùy chỉnh.

(3). Không có cách làm tiêu chuẩn nào; nó phải được xác định trên cơ sở từng dự án. Một cách tiếp cận là sử dụng các biến môi trường để định vị các phụ thuộc bên ngoài.Sau đó bạn có thể sử dụng các biến môi trường đó trong thuộc tính dự án. Thêm một readme.txt mô tả các công cụ và thư viện cần thiết và các biến môi trường tương ứng mà người dùng phải thiết lập, và nó sẽ dễ dàng đủ để mọi người có thể thiết lập.

+0

Trả lời 3. là sai. Vì VS2005 có thể sử dụng các tệp '.vsprops' để làm điều này chính xác trong phạm vi dự án của bạn mà không cần sự trợ giúp từ bên ngoài. Tôi đã sử dụng chúng rộng rãi kể từ đó và đã sử dụng các dự án không thay đổi chỉ với một vài tham số có liên quan được điều chỉnh trong tệp "property sheet" ('.vsprops'). Tôi nhận ra câu trả lời này là cũ, nhưng VS2005 và 2008 đã được phát hành vào thời điểm đó và do đó có * là * một cách tiêu chuẩn để làm điều đó. – 0xC0000022L

+0

@ 0xC0000022L Tôi không đồng ý rằng nó sai. Chắc chắn, bạn có thể sử dụng các bảng tính. Tuy nhiên, nó không phải là một tiêu chuẩn toàn hệ thống. Bạn sẽ phải phát triển quy ước mô tả tất cả các thư viện của riêng mình thông qua một hệ thống phân cấp của các bảng tính và luôn thực thi nó. Về mặt khái niệm, nó không khác với cách tiếp cận biến môi trường được đề xuất trong (3), và nó có một bất lợi khi khóa bạn vào hệ thống xây dựng cụ thể. – atzz

2

Cụ thể cho # 3, tôi sử dụng trang thuộc tính để chỉ định cài đặt vị trí thư viện của bên thứ 3 (bao gồm đường dẫn, đường dẫn liên kết, v.v.). Bạn có thể sử dụng Macro người dùng từ trang thuộc tính cấp độ gốc hoặc cấp cao hơn để chỉ định điểm bắt đầu cho chính thư viện (nếu chúng nằm trong vị trí gốc chung), sau đó xác định từng trang tính cho từng thư viện bằng macro đường dẫn cơ sở. Nó không phải là tự động, nhưng nó rất dễ bảo trì, và mọi nhà phát triển đều có thể có một thư mục gốc khác nếu cần thiết (nó nằm trong môi trường của chúng ta).

Một nhược điểm của phương pháp này là các đường dẫn được tạo theo cách này không được bao gồm trong đường dẫn tìm kiếm cho Visual Studio (trừ khi bạn sao chép các định nghĩa trong cài đặt Dự án và Thư mục cho VS). Tôi đã nói chuyện với một số người MS tại PDC08 về việc sửa lỗi này cho VS2010, và cải thiện giao diện nói chung, nhưng không có lời hứa chắc chắn nào từ họ.

4

Tôi đã trải qua vấn đề chính xác này và tôi đã làm cho nó hoạt động bằng cách sử dụng Quy tắc xây dựng tùy chỉnh.

Nhưng nó luôn luôn là một nỗi đau và làm việc kém. Tôi từ bỏ studio trực quan và đi với một hệ thống Makefile bằng cách sử dụng Cygwin. Bây giờ tốt hơn nhiều.

cl.exe là tên của trình biên dịch VS.

Cập nhật: Gần đây tôi đã chuyển sang sử dụng cmake, kèm theo các vấn đề của riêng nó và cmake có thể tạo ra một giải pháp phòng thu trực quan. Điều này dường như hoạt động tốt.

1

Tùy thuộc vào chính xác những gì bạn đang cố gắng làm, đôi khi bạn có thể có một số may mắn bằng cách sử dụng bước xây dựng tùy chỉnh và đặt phụ thuộc của bạn đúng cách. Nó có thể hữu ích để đặt tất cả các mã được tạo ra vào dự án riêng của nó và sau đó có dự án chính của bạn phụ thuộc vào nó.

Các vấn đề liên quan